我在逆向工程 stackexchange 中问了这个问题:https://reverseengineering.stackexchange.com/questions/15169/transferring-control-of-ptrace-to-another-process 因为我认为 ptrace 问题在那里最合适。
我没有被咬,不知道是因为那里人太少,还是对linux不太熟悉。无论如何,我想我应该在这里问。
我想创建一个进程A。在AI中想启动第二个进程B。我希望A继续监视系统资源。当满足某些条件时,我希望 A ptrace B,启动 gdb 并将 ptrace 控制权转移给 gdb。
这可能吗?如果没有,有没有办法 A 可以暂停 B,在附加 B 的情况下启动 gdb,然后“取消暂停”B?
答案1
无法发表评论,但因为还没有被咬:
最大的问题是为什么要切换到 gdb,为什么不继续使用 ptrace?
困难的部分肯定是控制权从 ptrace 转移到 gdb。具体来说,如何保持进程停止并让 GDB 连接并从那里恢复调试;当 ptrace 断开连接时,子进程会恢复执行,据我所知,这是不可避免的。
也许有一种不同的方法可以做到这一点。不管怎样,转换到 GDB 的条件是依赖于 A 监视的系统资源,还是 B 本地的条件?
如果我没记错的话,听起来你的“这可能吗”和“如果不是”选项要求做同样的事情。