不久前被问到的一个问——GDB为什么能够修改一个进程中的数据

来源:互联网 发布:javascript跑马灯效果 编辑:程序博客网 时间:2024/05/22 04:59

有天上课,突然被问到一个问题,为什么gdb调试工具能够修改另一个进程里面的变量的值,能够访问这个进程的内存,我猜想是用了什么共享内存,后来查资料后才明白是这样的原理。


linux下提供了一个名叫ptrace的系统调用,它赋予父进程对子进程追踪和控制的能力,允许父进程替换和修改子进程的内存空间,同时父进程会拦截发往子进程的信号,当然SIGKILL信号除外,子进程会一直阻塞,进程的状态为:TASK_TRACED 当父进程接受到信号时,会对子进程做相应的修改然后通知子进程运行。


这便是gdb能够调试的基础。由于不想深入的去了解所以只是做了简单的阐述。

0 0
原创粉丝点击