child,NULL,NULL)已经这样做了,PTRACE_CONT是不需要的,并更改为记录child_pid,但我没有得到孙子,...
ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_EXITKILL); 剩余部分就是一个简单的、无休止的循环了,每循环一次捕获一个系统调用。循环体总共有四步: 等待进程进入下一个系统调用。 输出系统调用的一个描述。 允许系统调用去运行并等待返回。 输出系统调用返回值。 这个PTRACE_SYSCALL 请求被用于等待下一个系统调...
通过data返回siginfo_t结构体 11) PTRACE_SETSIGINFO 设置信号量,这样正常发给tracee的信号量会首先被tracer捕获 12) PTRACE_PEEKSIGINFO 只读tracee的siginfo_t结构体 13) PTRACE_GETSIGMASK 获取tracee屏蔽的信号量 14) PTRACE_SETSIGMASK 设置tracee信号量屏蔽属性 15) PTRACE_SETOPTIONS 16) PTRACE_GETEVENTMSG 获取...
您的PTRACE_SETOPTIONS调用不正确。您正在执行:
11) PTRACE_SETSIGINFO 设置信号量,这样正常发给tracee的信号量会首先被tracer捕获 12) PTRACE_PEEKSIGINFO 只读tracee的siginfo_t结构体 13) PTRACE_GETSIGMASK 获取tracee屏蔽的信号量 14) PTRACE_SETSIGMASK 设置tracee信号量屏蔽属性 15) PTRACE_SETOPTIONS ...
voiddoParent(pid_tpid){intstatus;wait(&status);if(WIFEXITED(status)){return;}ptrace(PTRACE_SETOPTIONS,pid,NULL,PTRACE_O_TRACESYSGOOD);while(1){ptrace(PTRACE_SYSCALL,pid,NULL,NULL);wait(&status);if(WIFEXITED(status)){break;}structptrace_syscall_infoinfo;ptrace(PTRACE_GET_SYSCALL_INFO,pid,siz...
ptrace(PTRACE_SETOPTIONS,pid,0,PTRACE_O_EXITKILL); 1. 剩余部分就是一个简单的、无休止的循环了,每循环一次捕获一个系统调用。循环体总共有四步: 等待进程进入下一个系统调用。 输出系统调用的一个描述。 允许系统调用去运行并等待返回。 输出系统调用返回值。
PTRACE_SEIZE允许传递ptrace选项,与PTRACE_SETOPTIONS相同。attach后,tracer主要等待tracee通知,通常使用waitpid。根据返回值区分tracee停止的原因,有三种类型:group-stop、syscall-stop和signal-deliver stop。group-stop表示整个进程收到停止信号,常见的信号有SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU。syscall-stop...
ptrace(PTRACE_SETOPTIONS,pid, 0, PTRACE_O_EXITKILL); 捕捉系统调用的循环步骤如下: 等待进程进入下一次系统调用。打印系统调用信息。允许系统调用执行,并等待返回结果。打印系统调用的返回值。 PTRACE_SYSCALL请求可以完成等待下一个系统调用以及等待系统调用结束这两个任务,跟之前一样,这里也需要使用wait(2)来等待...
ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_EXITKILL); 剩余部分就是一个简单的、无休止的循环了,每循环一次捕获一个系统调用。循环体总共有四步: 等待进程进入下一个系统调用。 输出系统调用的一个描述。 允许系统调用去运行并等待返回。 输出系统调用返回值。