假设我有一个包含三个线程的进程:A、B 和 C。
我想使用线程 A 暂停线程 B,检查线程 B 的寄存器值/堆栈内容,然后将线程 B 中的一些信息提供给线程 C(通过线程 A)。
根据this http://yarchive.net/comp/linux/ptrace_self_attach.html莱纳斯·托瓦兹 (Linus Torvalds) 的帖子ptrace
系统调用在这里不起作用,因为线程位于同一进程内。
还有另一种方法可以实现此目的吗?
Update: this https://stackoverflow.com/questions/24157315/ptrace-one-thread-from-another问题讨论why它不起作用;我想知道是否存在不涉及创建子进程的解决方法。
您也许可以使用信号来解决此问题。选择一个其他未使用的信号,例如SIGUSR1
并使用以下命令为其安装信号处理程序sa_sigaction
成员struct sigaction
并指定SA_SIGINFO
旗帜。阻止除感兴趣的线程(线程 B)之外的每个线程中的信号。
当您想要检查线程 B 时,请使用以下命令向其发送线程定向信号pthread_kill()
。然后信号处理程序将触发,它的第三个参数将是一个指向ucontext_t
结构。这uc_mcontext
该结构的成员是依赖于机器的mcontext_t
结构体,它将包含线程中断时的寄存器值。
然后,您只需设计一种安全的方法将这些值传递回线程 A。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)