c - 进程调用 ptrace(PTRACE_TRACEME, ...) 后会发生什么?

标签 c linux gcc gdb

进程调用 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/

相关文章:

objective-c - scanf 没有在我的循环中等待输入?

无法理解此代码堆栈存储函数调用 c 的输出

python - 使用 Python 安装信号处理程序

c - 启用优化的奇怪行为

c - 将寄存器的内容读入 C 变量时的奇怪行为

c - 是什么意思!!在 C 中——为什么需要它?

ios - 使用 C 的 Pebble watch 应用程序。检查互联网连接?

ios - 更改 EXIF 数据以正确识别 iPhone

linux - 根据版本对文件进行排序

c - C 中的函数指针与结构不活动