假设一个调试器(常见的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.