加载中...

| 中文名 | 进程跟踪 |
| 英文名 | ptrace |
| 类型 | 系统调用 |
| 典型工具 | GDB、strace |
| 安全限制 | Yama ptrace_scope |
ptrace(process trace,进程跟踪)是Linux及类Unix系统提供的一个系统调用,它允许一个称为跟踪者(tracer)的进程去观察和控制另一个被跟踪进程(tracee)的执行,包括读写其内存、检查和修改寄存器、拦截信号与系统调用。
ptrace是众多调试与分析工具背后的核心机制。当被跟踪进程触发特定事件(如收到信号、执行系统调用、单步执行)时,内核会暂停它并通知跟踪者,跟踪者随后可以检查状态、修改数据,再让其继续运行。通过这种停停走走的控制流,调试器得以实现断点、单步和变量查看等功能。
ptrace是GDB、LLDB等调试器的基础,也是strace跟踪系统调用、ltrace跟踪库调用的实现手段。它还用于沙箱、反调试对抗、故障注入以及一些进程热补丁场景。由于它能完全控制目标进程,出于安全考虑,现代系统通过Yama等模块限制非父子进程之间的随意附加。
问:为什么strace运行下程序会明显变慢?答:因为strace用ptrace在每个系统调用的进入和退出都让进程停下并切换到跟踪者处理,频繁的上下文切换带来了显著开销。
问:为什么有时无法附加到别的进程?答:出于安全,许多发行版启用了Yama ptrace_scope限制,默认只允许跟踪自己的子进程,附加到无关进程需要更高权限或调整该设置。

| 中文名 | 进程跟踪 |
| 英文名 | ptrace |
| 类型 | 系统调用 |
| 典型工具 | GDB、strace |
| 安全限制 | Yama ptrace_scope |
登录 后参与讨论
暂无讨论,来发表第一条评论吧