代码之家  ›  专栏  ›  技术社区  ›  ldog

编写非常基本的调试器

  •  6
  • ldog  · 技术社区  · 16 年前

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

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

    2 回复  |  直到 16 年前
        1
  •  12
  •   Michael    16 年前

    您需要使用writeprocessmemory将断点(在x86上,操作码为0xcc)写入地址。 在x86上,当调试对象到达代码中的该点时,0xCC将生成一个int 3异常。这是由调试器的waitForDebugEvent获取的,它将返回一个调试事件,但有一个异常的调试事件集。

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

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

        2
  •  1
  •   Ana Betts    16 年前

    Michael是对的——同样,如果你想在连接后在调试器中闯入一个任意的进程(例如,如果用户突然点击“闯入进程”),标准的方法是创建一个远程线程,它的例程发出一个int3。

    推荐文章