gpt4 book ai didi

linux - 使用 ptrace 异步停止附加线程 - linux

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:19 26 4
gpt4 key购买 nike

在使用 pid 附加 pthread 并操作其调试寄存器的内容之后,使用 waitpid(-1, &status, __WALL) 等待;我希望能够停止该线程并进行其他操作(定义另一个断点等)。

当我尝试使用 kill() 发送信号并等待线程准备好接受额外的 ptrace 请求时,对于一个目标线程,它工作正常。另一方面,当跟踪线程的数量增加时,我陷入了 waitpid() 调用并且永远无法解除阻塞。

是否有一种安全快速的机制来停止正在运行以进行其他修改的附加线程?

干杯。

最佳答案

向线程发送信号时,不要使用pid。向进程发送信号(这就是您正在做的)将其发送到该进程内的某个随机线程,这几乎肯定不是您想要做的。发送线程信号的工具是ptrhread_kill

这就是事情变得有点复杂的地方。 ptrace 接口(interface)使用“线程 ID”(或 tid)。它们在与进程 ID 相同的上下文中构建,即 - 整数。另一方面,pthread_kill 使用的是 pthread_t 类型,它是不透明的,不是同一回事。

由于使用 ptrace 意味着您已经进入了黑暗魔法世界,最简单的解决方案是使用 tgkill。只需将您的 tidpid 放在相关字段中,您就成功了。

当然,tgkill 不是导出函数。您需要将其包装在 syscall 中才能调用它。

关于linux - 使用 ptrace 异步停止附加线程 - linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com