断点是怎么实现的?

必备知识:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,177评论 0 23
  • 文/tangsl(简书作者) 原文链接:http://www.jianshu.com/p/2b993a4b913e...
    西葫芦炒胖子阅读 3,826评论 0 5
  • 生命的赞歌, 憾人的动作, 朦胧的身段, 仿佛风中摇曳的精灵。 令人遐想无限。 是在诠释生命? 还是在诉说情感? ...
    月璃殇阅读 215评论 0 0
  • 一: 目标: 2017年轻松喜悦的获得50万的财富,亚马逊店铺订单多多,生意兴隆! 动机和愿景: 愿我现在及过去所...
    韩磊_fb71阅读 318评论 2 1
  • 关键字 :执行 似乎是拖延症形象代表了,当初兴致勃勃四处挖别人的经历,“介意我写一下你的事吗?” 及至现在公众号的...
    海的节奏阅读 213评论 0 1