写在前面:
本人之前长期从事单片机开发(也就几年),不涉及操作系统,其他项目经历也仅止于windows下图形化界面
的各种应用开发(百度出身)。涉猎虽广但也只是浅尝辄止,关于操作系统和linux下的知识,包括java和jvm都是一知半解,知识点十分碎片化,虽然也有大概的概念,但细节和系统完全对应不上。但是学习理论后实践不是我的风格,真男人不需要hello world。直接从具体事例开搞。
Mozilla rr是一个业内广受好评的开源debug工具,具有record和replay功能。源码和相关资料可以在谷歌搜索到。其中有个一个tech 文档详细介绍了rr的相关知识。
于此直接开读此文档,发现每个单词都可以看得懂(不行就翻译嘛),连在一起不知道啥意思,所以先把一些莫名其妙的名词简单看一下是什么东西,主要是LINUX的各种相关知识,我相信在粗略了解了各种名词后再系统的看书将其串起来会比直接学习理论事半功倍,于是,开始走起!
Ptace:
ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
使用ptrace,你可以在用户层拦截和修改系统调用(sys call)
(感想: ptrace看