调试 – 调试器如何从断点恢复?

假设一个调试器(常见的x86 ring3调试器,如olly,IDA,gdb ……)设置了一个

软件断点到虚拟地址0x1234.

这是通过将0x1234处的任何操作码替换为’0xCC’来实现的
现在让我们假设debugee进程运行这个0xCC指令并加注
软件异常和调试程序捕获了这一点.

调试器检查内存内容,寄存器和做一些东西..和
现在它想恢复debugee过程.

这是据我所知.从现在开始,这是我的假设.

调试器恢复原始操作码(被替换为0xCC)
debugee为了恢复执行.

调试器操纵debugee的CONTEXT的EIP指向
恢复指导.

调试器处理异常,现在,debugee从断点恢复.

但调试器希望断点保持不变.
调试器如何管理这个?

最佳答案 从
GDB internals manual直接回答原始问题:

When the user says to continue, GDB will restore the original
instruction, single-step, re-insert the trap, and continue on.

点赞