美文网首页
断点是怎么实现的?

断点是怎么实现的?

作者: Lee_d441 | 来源:发表于2018-11-22 16:53 被阅读0次

必备知识:

1)一个debugger进程,一个要调试的program进程

2)一个进程可以通过sys_call(ptrace)修改另一个进程的内存值和寄存器值

3)可以通过Signal(操作系统信号)来暂停、停止、退出一个正在运行的进程

简易版本:

1)当用户设置一个breakpoint后,debugger进程替换program进程对应代码位置的指令为0xCC。

2)当程序进程进行到对应位置时,执行0xCC对应的操作即INT 3。INT 3 会使得操作系统发送SIGTRAP给program进程,导致程序进程暂停运行

3)由于debugger进程是program的父进程,当program暂停时,父进程收到信息,然后debugger进程将程序之前的指令放回program内存,并继续program的运行(通过PTRACE_CONT)

4)除此之外,debugger进程可以通过PTRACE_POKETEXT和PTRACE_SETREGS获取program暂停时的内存数据,因此我们可以看到断点时的程序参数数据及变化

因此,是通过更改程序的内存数据,来触发系统信号来暂停program的运行,并通到sys_call来获取program的当前参数数据,再通过sys_call来继续执行program

代码级信息待续


参考文章

How Debuggers Work

断点原理

ARM Debugger

相关文章

网友评论

      本文标题:断点是怎么实现的?

      本文链接:https://www.haomeiwen.com/subject/skalqqtx.html