【发布时间】:2016-04-17 14:04:36
【问题描述】:
我想通过以下方式使用ptrace(伪代码):
孩子:
foo();
now that foo is done parent should use ptrace to change things
parent did what he wanted to do
bar();
父母:
pid = fork();
if (pid == 0)
//child
exec(child_program)
else
//parent
attach ptrace
let child run
use ptrace to modify it's data
let child continue
孩子应该如何与父母沟通它已经完成
foo并准备好进行修改?raise(SIGSTOP)可能吗?父母应该如何等待孩子运行
foo?
我认为我们可以假设在应该使用 pthread 之前没有引发 SIGSTOP。
【问题讨论】:
-
您应该在 strace 环境中启动调试器会话。在那里您可以看到调试器如何操作被跟踪的进程以及它如何与 SIGCHLD 和其他信号进行交互。
-
如果
foo是一个共享库函数,您可以使用LD_PRELOAD通过您的替代实现加载共享对象。否则,您需要希望foo不会在任何地方内联,并且您的可执行文件具有调试信息。 -
@ColonelThirtyTwo foo 只是子程序中定义的 C 中的一些函数,而不是共享库。