use*_*188 22 debugging x86 assembly
我读过INT 3(0xCC)用于软件断点.
它由(例如)调试器通过覆盖存储器中的实际程序代码来设置.
我还读到INT 3是一个"陷阱"而非"故障"异常,这意味着堆栈上的地址是INT3指令后面的指令地址.
如果未重新执行修补的指令,调试器如何保证正确性?
Jer*_*fin 26
当您想在断点触发后继续执行时,您有两种可能:断点只应该触发一次,或者它应该是持久性的.如果它只应该触发一次,你用断点指令恢复你覆盖的原始值,手动调整地址到该指令的地址(记住,不管那里有什么指令,执行的是你的单字节断点,所以调整总是微不足道的.然后你继续执行.
如果它应该是一个持久性断点,那么就会增加一个皱纹:在继续执行之前,在堆栈中的标志中设置单步(也就是陷阱)位.这意味着只有设置了断点的一条指令才会执行,那么你将再次获得一个断点中断.您可以通过将刚刚修补的int 3字节恢复到原始指令的第一个字节来响应,然后(再次)继续执行.
| 归档时间: |
|
| 查看次数: |
15928 次 |
| 最近记录: |