有没有办法让gdb与另一个进程共享ptrace?
我需要运行另一个进程,该进程需要ptrace(),这是次进程。但gdb也需要将ptrace()设置为相同的次方,因此这将导致混乱。我想到的第一个也是显而易见的解决方案是,当另一个进程需要访问次进程时,分离gdb,然后再次连接,但是当次进程停止调试时,这也是有问题的。然后,我尝试使用gdb的有没有办法让gdb与另一个进程共享ptrace?,gdb,ptrace,Gdb,Ptrace,我需要运行另一个进程,该进程需要ptrace(),这是次进程。但gdb也需要将ptrace()设置为相同的次方,因此这将导致混乱。我想到的第一个也是显而易见的解决方案是,当另一个进程需要访问次进程时,分离gdb,然后再次连接,但是当次进程停止调试时,这也是有问题的。然后,我尝试使用gdb的shell命令从gdb启动另一个进程,我认为如果gdb作为子进程执行另一个进程,它可能会工作,但即使gdb作为子进程执行,它们也会有不同的pid,所以问题仍然存在 有没有可能使gdb和其他进程看起来像是共享同一
shell
命令从gdb启动另一个进程,我认为如果gdb作为子进程执行另一个进程,它可能会工作,但即使gdb作为子进程执行,它们也会有不同的pid,所以问题仍然存在
有没有可能使gdb和其他进程看起来像是共享同一个pid,这样它们就可以连接到同一个进程?抱歉,如果这是一个无趣的问题,我还是Linux新手。不,没有办法做到这一点
您最好的选择是向gdb添加新代码以完成您想要的任务。不,没有办法做到这一点 您最好的选择是向gdb添加新代码以完成您想要的任务。解决方案1:不要使用ptrace 在最新版本的Linux(自3.2版起)中,一个进程可以读取/写入另一个进程内存,而无需先读取/写入它:
- 通过
-ingopen/read/write
(在Linux 3.2之前,只有在目标进程停止时才可以读取此文件,但由于Linux 3.2,您不需要停止目标进程)/proc/$pid/mem
- 或者使用新的系统调用
PTRACE\u ATTACH
、PTRACE\u DETACH
、PTRACE\u PEEKDATA
和PTRACE\u POKEDATA
,因此应该可以简单地编写一个PTRACE
版本
解决方案2:GDB服务器
总结:
[GDB] ----------> [ tracer ] ---> [ traced ]
GDB protocol ptrace
您有三个过程:
- GDB过程
- (其他)示踪过程
- 跟踪过程
- 通过
-ingopen/read/write
(在Linux 3.2之前,只有在目标进程停止时才可以读取此文件,但由于Linux 3.2,您不需要停止目标进程)/proc/$pid/mem
- 或者使用新的系统调用
PTRACE\u ATTACH
、PTRACE\u DETACH
、PTRACE\u PEEKDATA
和PTRACE\u POKEDATA
,因此应该可以简单地编写一个PTRACE
版本
解决方案2:GDB服务器
总结:
[GDB] ----------> [ tracer ] ---> [ traced ]
GDB protocol ptrace
您有三个过程:
- GDB过程
- (其他)示踪过程
- 跟踪过程
第二种解决方案过于复杂/过于复杂,无法实现。然而,这并非完全不可能。只是很难。可能比它的价值更难(即-比入侵gdb)。然而,这是为了让
strace
发挥作用
其思想是,如果您同时运行由同一个调试器跟踪的目标进程和gdb,您可以模拟gdb完成的ptrace
调用,并自己执行它们。结果是gdb认为它在跟踪您的子进程,但实际上,您是跟踪它的那个人
正如我上面所说的,这种方法绝不比破解gdb来做你想做的事情简单。这并非完全不可能。只是很难。可能比它的价值更难(即-比入侵gdb)。然而,这是为了让
strace
发挥作用
其思想是,如果您同时运行由同一个调试器跟踪的目标进程和gdb,您可以模拟gdb完成的ptrace
调用,并自己执行它们。结果是gdb认为它在跟踪您的子进程,但实际上,您是跟踪它的那个人
正如我上面所说的,这种方法绝不比黑客攻击gdb来做你想做的事情简单。Linux在同一个目标上调用
ptrace
的两个进程。你到底想完成什么?我想运行scanmem和gdb来进行一些基本的内存搜索。我还尝试使用gdb的find
命令来完成这项工作,但是速度太慢了。你到底想完成什么?我想运行scanmem和gdb来进行一些基本的内存搜索。我也试着用gdb的find
命令来做,但是速度太慢了