进程调用 ptrace(PTRACE_TRACEME, ...) 后,tracee 在哪里停止?
tracee 是否在 exec()
系统调用中停止? (好像不是)
tracee 是否在动态链接器文本中停止?
...
如果我编译一个没有任何动态链接库和 glibc c-runtime 的可执行文件,并指定入口点, tracee 将在入口点停止。
但是当我用 glibc(gcc hello-world.c
) 编译一个可执行文件时,它会在 /lib/ld-2.20.so offset + 0xfb0
处停止。 (cat/proc/[pid]/maps)
希望有更多的细节。
man ptrace
似乎没有帮助。
最佳答案
tracee 通常在调用 execve()
时停止,这将导致它被发送一个 SIGTRAP。
有些使用 raise()
来确保发送信号,如下所示:
ptrace(PTRACE_TRACEME);
kill(getpid(), SIGSTOP);
return execvp(args[0], args);
关于c - 进程调用 ptrace(PTRACE_TRACEME, ...) 后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991214/