在同一进程中,有没有一种方法可以从另一个线程中查看一个线程的寄存器内容?

4
假设我有一个包含三个线程(A,B和C)的进程。
我想使用线程A暂停线程B,检查线程B的寄存器值/堆栈内容,然后通过线程A将一些来自线程B的信息传递给线程C。
根据Linus Torvalds的this帖子,ptrace系统调用在这里不起作用,因为这些线程在同一个进程内。
还有其他方法可以完成这个任务吗?
更新:this问题讨论了为什么它不起作用;我想知道是否存在一种解决方法,而不涉及创建子进程。
1个回答

2
您可以使用信号绕过此问题。选择一个未被使用的信号,例如SIGUSR1,并使用struct sigactionsa_sigaction成员为其安装信号处理程序,并指定SA_SIGINFO标志。在每个线程中阻止该信号,除了感兴趣的线程B。
当您想要检查线程B时,使用pthread_kill()向其发送线程定向信号。然后,信号处理程序将启动,其第三个参数将是指向ucontext_t结构的指针。该结构的uc_mcontext成员是一个与机器相关的mcontext_t结构,其中包含在线程被中断时的寄存器值。
然后,您只需设计一种安全的方式,将这些值传回线程A即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接