【发布时间】:2014-08-18 20:40:53
【问题描述】:
根据 ptrace 手册页,
如果 PTRACE_O_TRACEEXEC 选项无效,则被跟踪进程对 execve(2) 的所有成功调用都将导致向其发送 SIGTRAP 信号,从而使父进程有机会在新程序开始执行之前获得控制权。
如果选项是有效,
在下一个 execve(2) 处停止被跟踪者。跟踪器的 waitpid(2) 将返回一个状态值,例如
status>>8 == (SIGTRAP | (PTRACE_EVENT_EXEC<<8))。如果执行线程不是线程组组长,则线程 ID 在此停止之前重置为线程组组长的 ID。从 Linux 3.0 开始,可以使用 PTRACE_GETEVENTMSG 检索以前的线程 ID。
因此,如果未设置该选项,则被跟踪者获取 SIGTRAP 并停止,以便跟踪者获得控制权。如果设置了选项 ,则被跟踪者获取 SIGTRAP 并停止。有什么区别(除了最后关于线程的部分)?
【问题讨论】: