使用ptrace自我附加?

时间:2015-07-13 23:08:42

标签: linux pthreads ptrace

是否可以从该进程中的线程ptrace相同的进程?我在[1]发现了一个讨论,这似乎暗示了一种方式(可能或可能不起作用)似乎有点涉及我,因为我对pthreads API并不熟悉。有人试过吗?任何代码指针都会很棒。

[1] http://yarchive.net/comp/linux/ptrace_self_attach.html

1 个答案:

答案 0 :(得分:0)

你最重要的是想要使用POSIX线程(pthreads)。 POSIX线程引入了一组全新的应用程序语义,这里不适用。

第二段解释了如何以正确的方式做到这一点:

对于第一个,我找到了一个合理的方法来避免这个问题: 调试线程可以执行“vfork()”(或者,如果vfork()执行了不好的操作 libc,直接“克隆(CLONE_VFORK | CLONE_MM)”的事情来做一个新的 在_different_线程组中的线程,但能够ptrace和 也与VM“同步”,因为它与所有人共享 它可能想要调试的其他线程

这种机制是用户空间调试器如gdb(1)和crash(8)的工作方式:它们使用vfork(2)创建紧密耦合的子进程或使用类似的Linux特定的clone(2)系统调用

如果事实,这就是每个程序除了原始init(1)程序之外的运行方式:当前进程分叉,一个进程[通常是子进程]然后exec(2)'覆盖其执行环境的所需程序。