6

是否可以在 Windows 下编写一个程序,该程序会在到达预定义地址时导致远程进程线程中断(在该线程中停止执行)?

我一直在尝试使用 Windows Debug API,但在设置断点方面似乎非常有限。DebugBreakProcess 函数看起来很有希望,但我找不到任何关于如何使用此 API 调用的示例。

4

2 回答 2

12

您需要使用 WriteProcessMemory 将断点(在 x86 上,0xCC 的操作码)写入地址。在 x86 上,当被调试者点击代码中的那个点时,0xCC 将生成一个 int 3 异常。这是由您的调试器获取的 WaitForDebugEvent 将返回一个设置了 EXCEPTION_DEBUG_EVENT 的 DEBUG_EVENT。

然后,您需要将该地址修补回其原始代码,然后再继续。如果要再次中断,则需要单步执行,然后重新修补断点操作码。要单步,您需要在线程上下文中的 EFlag 中设置单步标志。

DebugBreakProcess 用于生成您正在调试的进程的远程中断 - 它不能用于在代码中的任意点中断。

于 2009-06-11T22:16:25.430 回答
1

Michael 是对的 - 此外,如果您想在附加后在调试器中闯入任意进程(即,如果用户突然点击“闯入进程”),标准方法是创建一个远程线程,其例程发出一个 int3。

于 2009-06-11T22:23:12.557 回答