내 자신의 프로세스에서 syscall을 모니터/리디렉션하려고합니다. fwrite
이 libc 안에 write
을 호출 할 때 LD_PRELOAD가 작동하지 않으며/plt 후크에 같은 문제가있는 것 같습니다. ptrace 기반의 솔루션을 찾고 있지만 응용 프로그램이 신호를 통해 부모와 통신하기 때문에 fork() 및 기본 응용 프로그램을 자식으로 실행할 수 없습니다.Ptrace 상위 프로세스
거기 tracee는 다릅니다 스레드 그룹에있을 수있는 추적을 제안 2006 스레드이지만 실제로는 작동하지 않습니다 http://yarchive.net/comp/linux/ptrace_self_attach.html
pid = fork();
if (pid == 0) {
prctl(PR_SET_PTRACER, getppid());
raise(SIGSTOP);
} else {
sleep(1);
ptrace(PTRACE_SEIZE, pid, NULL, NULL);
for (;;) {
int status;
int ret = waitpid(pid, &status, 0);
warn("wait=%d:", ret);
ret = ptrace(PTRACE_SYSCALL, pid, NULL, NULL);
warn("ptrace=%d:", ret);
}
}
을 난 문제 즉, ptrace (PTRACE_SYSCALL)는 트레이스가 ptrace-wait 상태에있을 것으로 예상합니다. 즉, 트레이스가 SIGSTOP을 발생시켜 트레이서가 기다려야합니다. PTRACE_SYSCALL은 ESRCH를 반환합니다.이 경우 travers는 트레이스의 자식입니다.
strace는 기존 PID 추적 기능을 어떻게 사용합니까?