首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程调用ptrace(PTRACE_TRACEME,...)后会发生什么?

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

Stack Overflow用户
提问于 2015-10-07 19:38:23
回答 2查看 884关注 0票数 1

在一个进程调用ptrace(PTRACE_TRACEME,...)之后,tracee在哪里停止?

tracee是否在exec()系统调用中停止?(似乎不是)

tracee是否在动态链接器文本中停止?

..。

如果我编译一个没有任何动态链接库和glibc c- the的可执行文件,并指定入口点,tracee将在入口点停止。

但是当我用glibc(gcc hello-world.c)编译一个可执行文件时,它会在/lib/ld-2.20.so offset + 0xfb0处停止。(cat /proc/pid/map)

希望有更多关于这方面的细节。

man ptrace似乎帮不上忙。

EN

回答 2

Stack Overflow用户

发布于 2015-10-07 21:31:22

tracee通常在完成对execve()的调用时停止,这将导致它被发送一个SIGTRAP。

有些使用raise()来确保发送信号,如下所示:

代码语言:javascript
复制
ptrace(PTRACE_TRACEME);
kill(getpid(), SIGSTOP);
return execvp(args[0], args);
票数 0
EN

Stack Overflow用户

发布于 2016-02-01 17:03:06

kill(getpid(),SIGSTOP);return execvp(args,args);

谢谢。那么,当tracee停止时,CPU EIP寄存器指向哪条指令?

kill(pid_t pid, int sig)函数的规范回答了这个问题。

如果pid的值导致为发送进程生成sig,并且如果sig对于调用线程没有被阻塞,并且如果没有其他线程的sig解锁或者正在sigwait()函数中等待sig,则在

()返回之前,sig或者至少一个挂起的unblocked信号应该被传递到发送线程。

因此,由于上面的kill(getpid(), SIGSTOP),该进程在库函数kill()返回之前停止,通常在系统调用之后的指令处停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32991214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档