Content #
int3 是断点中断指令,机器指令码为CC。这条指令在调试程序的时候很有用,当程序运行不正常时,多数时候希望在某个地方设置一个检查点,也称断点,来查看寄存器、内存单元或者标志寄存器的内容,这条指令就是为这个目的而设的。
指令都是连续存放的,因此,所谓的断点,就是某条指令的起始地址。int3 是单字节指令,这是有意设计的。当需要设置断点时,可以将断点处那条指令的第 1 字节改成0xcc,原字节予以保存。当处理器执行到int3 时,即发生3 号中断,转去执行相应的中断处理程序。中断处理程序的执行也要用到各个寄存器,这会破坏它们的内容,但push 指令不会。我们可以在该程序内先压栈所有相关寄存器和内存单元,然后分别取出予以显示,它们就是中断前的现场内容。最后,再恢复那条指令的第1 字节,并修改位于栈中的返回地址,执行iret 指令。