低开销方式访问跟踪进程的内存空间?

vov*_*ick 7 linux ptrace

我正在寻找一种有效的方法来访问(对于读取和写入操作)我的ptraced子进程的内存空间.正在访问块的大小可以从几个字节不等大小高达数兆字节,因此,使用ptrace的呼叫与PTRACE_PEEKDATAPTRACE_POKEDATA它的时间和开关方面每一个他们所谓的似乎是资源的无谓浪费时间阅读只有一个字.但是,我能找到的唯一一个替代解决方案是/proc/<pid>/mem文件,但它早已被认为是只读的.

有没有其他(相对简单)的方式来完成这项工作?理想的解决方案是以某种方式与其父进程共享我的子进程的地址空间,然后使用简单的memcpy调用来复制我需要的两个方向的数据,但我没有线索如何做到这一点以及从哪里开始.

有任何想法吗?

Dav*_*veR 5

如果这是 Linux(标签表明是这样),您可以使用clone()withCLONE_VM标志与父级共享子级的整个地址空间。由于两个进程共享相同的虚拟机空间,因此所有修改在两者之间都将立即可见,并且开销基本上为零。

这确实意味着你不能exec()在孩子身上;因为它将取代两个进程的虚拟机空间。


kmm*_*kmm 2

您是否可以控制子进程及其源代码?如果是这样,您可以考虑使用共享内存