【问题标题】:Debuggers : Soft breakpoint调试器:软断点
【发布时间】:2012-12-06 15:40:29
【问题描述】:

我目前正在研究调试器。我读过调试器有软件断点(apparently 这些是最常用的断点)。这些通过将操作码的第一个字节替换为 Int 3(操作码 0xcc)来工作。

我读过程序的文本(/code)段是只读的(如果这个段不需要只读的话,就是停止代码修改自己的指令,自我修改代码)。我的问题是调试器如何修改只读指令。我在这里错过了什么吗?对此的任何 cmets 或对此理论的指针表示赞赏。

谢谢。

【问题讨论】:

  • 有些调试器能够在调试期间修改代码。以 Visual Studio 为例。我怀疑您不是在修改指令,而是在修改这些指令引用的值

标签: debugging breakpoints


【解决方案1】:

在 Windows 桌面和服务器平台上,可以使用 kernel32.dll 导出的 VirtualProtect 函数更改内存页面保护。因此,例如,如果调试器想要在某个地址写入 0xcc,但该地址位于标记为只读的页面中,则调试器可以将该页面的保护设置为读写(假设它具有足够的权限),然后写入价值。

这样做的副作用是它会导致该内存页面的写时复制 (COW) 错误,现在被调试进程将拥有它自己的页面物理副本。这可以防止在共享该物理页面的所有进程中设置断点。

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 2010-11-05
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-03-06
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多