gpt4 book ai didi

linux - ptrace父进程

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:53 24 4
gpt4 key购买 nike

我正在尝试在我自己的进程中监控/重定向系统调用。当 fwrite 在 libc 中调用 write 时,LD_PRELOAD 不起作用,got/plt hooks 似乎也有同样的问题。我正在寻找基于 ptrace 的解决方案,但我不能 fork() 并作为子应用程序运行主应用程序,因为该应用程序通过信号与其父应用程序通信。

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 并且跟踪器需要为它等待()。由于在这种情况下关系是相反的(跟踪者是被跟踪者的 child )PTRACE_SYSCALL 返回 ESRCH。

strace 如何摆脱对现有 pid 的跟踪?

最佳答案

我有点不清楚你到底在问什么。听起来你已经解决了附加部分(这是最难解决的问题)。如果是这样,那么让进程停止不是问题。只需向进程发送信号即可。该过程将停止并向您发送一个 TRAP,以便您决定如何处理该信号。此时你可以调用ptrace(PTRACE_SYSCALL, pid, 0, 0)。这将以 SYSCALL 跟踪模式启动它,并防止您的信号到达被调试者(因此不会将意外信号引入进程)。

关于linux - ptrace父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38185391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com