不久前被问到的一个问——GDB为什么能够修改一个进程中的数据
2016-04-16 20:45
405 查看
有天上课,突然被问到一个问题,为什么gdb调试工具能够修改另一个进程里面的变量的值,能够访问这个进程的内存,我猜想是用了什么共享内存,后来查资料后才明白是这样的原理。
linux下提供了一个名叫ptrace的系统调用,它赋予父进程对子进程追踪和控制的能力,允许父进程替换和修改子进程的内存空间,同时父进程会拦截发往子进程的信号,当然SIGKILL信号除外,子进程会一直阻塞,进程的状态为:TASK_TRACED 当父进程接受到信号时,会对子进程做相应的修改然后通知子进程运行。
这便是gdb能够调试的基础。由于不想深入的去了解所以只是做了简单的阐述。
linux下提供了一个名叫ptrace的系统调用,它赋予父进程对子进程追踪和控制的能力,允许父进程替换和修改子进程的内存空间,同时父进程会拦截发往子进程的信号,当然SIGKILL信号除外,子进程会一直阻塞,进程的状态为:TASK_TRACED 当父进程接受到信号时,会对子进程做相应的修改然后通知子进程运行。
这便是gdb能够调试的基础。由于不想深入的去了解所以只是做了简单的阐述。
相关文章推荐
- [Google Codejam] Round 1A 2016 - The Last Word
- ajax加载本地html文件出现 XMLHttpRequest cannot load的问题
- [Spring]Annotation-based container configuration_AnotationBasis_02
- 专题二1005
- 20145106《Java程序设计》第7周学习总结
- tcp流量控制和拥塞控制
- 视频直播,手机直播,视频秀的app简介
- 动态加载远程Jar的实现方式
- C#中if_else以及for循环的简单理解
- 算法导论 思考题 2-2
- java之Secure hash functions
- java中的基本类型
- 堆排序
- java设计模式之策略
- 关于安卓应用方法过多的问题
- 统计你的手机号码中出现次数最多的数字,并打印出此数字及其出现次数
- 《Java程序设计》实验二 实验报告
- 归并排序 & 数组中的逆序对 【java实现】
- 数据库 - E-R模型设计
- spark1.4的本地模式编程练习(1)