- 应用
gdb ./XX
时,gdb 过程 fork 出子过程,调用 ptrace(PTRACE_TRACEME)零碎调用跟踪,而后 exec 替换可执行文件 - ptrace 十分弱小,它容许跟踪过程读写被跟踪过程的代码空间、数据空间、堆栈、寄存器组的值,而且接管了操作系统发给被跟踪过程的信号
- 应用
gdb attach pid
的时候,gdb 过程收养了被跟踪过程,调用了 ptrace(PTRACE_ATTACH) -
如何实现断点指令:将断点处代码贮存到断点链表,插入中断代码;当产生中断时,操作系统发信号被 gdb 截获,查问断点链表
- 将断点代码写回
- 从新设置 PC 指向断点