我想将一个共享库注入一个进程(我正在使用ptrace()
来执行该部分)然后能够从共享库中获取输出回到我正在编写的调试器中IPC的形式。我的直觉是使用管道,但唯一真正的要求是:
我遇到的问题是,据我所知,如果我在调试器中调用pipe()
,则无法将管道的“发送”端传递给目标进程,接收端反之亦然。我可以设置共享内存,但我认为这需要在某处创建一个文件,以便我可以从两个进程引用内存段。其他调试器在进程已经开始运行后附加到进程时如何捕获输出?
答案 0 :(得分:0)
我认为您需要一个用于业务逻辑代码的调试系统(我的意思是应用程序)。根据我的经验,这种问题通过以下解释的系统设计来解决。 (我的经验是在C ++中,我认为同样必须对基于C的系统也有好处。)
在较高的层面上,这是开发日志系统的最通用方法。如果您需要任何信息 - 请对其进行评论。我会尽力回答。
答案 1 :(得分:0)
使用更好的搜索字词告诉我这个问题是这些人的重复:
Can I share a file descriptor to another process on linux or are they local to the process?
How to use sendmsg() to send a file-descriptor via sockets between 2 processes?
最热门的答案就是我所寻找的。您可以使用Unix域套接字将文件描述符移交给其他进程。这可以从调试器到库,反之亦然,但从调试器到库可能更容易,因为调试器可以在注入库时将套接字的地址写入目标进程。
但是,一旦我将套接字的地址传递给目标进程,我不妨使用套接字本身,而不是另外使用管道。