断点指令INT3
- 汇编语句INT3对应的指令码是0xCC
- 单独执行0xCC时(将0xCC单独作为一条指令执行),会陷入内核,执行int3的异常处理代码,比如给当前进程发送一个SIGTRAP信号。就这么简单。剩下的就看信号处理程序如何发挥了。
- 对于GDB:
1)若用b在某行指令打上断点后,系统会将目标指令的第一个字节替换为 0xCC ,其他字节不变
2)当进程(记为P1)执行到该指令时发现第一个字节为0xCC,则触发断点(注意此时P1的PC值为该指令的首地址+1,并不是下一条指令的首地址),发送SIGTRAP信号给GDB进程,此时P1卡住不执行,若在GBD中输入c表示继续执行,则GDB进程会向P1发送继续执行的信号
3)当P1收到继续执行的信号时会将刚刚被替换的0xCC字节替换为原来的字节,然后将P1的PC-1(回到触发断点的指令首地址),然后继续执行
4)若该断点依然存在,则系统又会将目标指令的第一个字节替换为 0xCC