我有两个进程(Linux ELF(:进程A是主进程,B是子进程(A使用fork((创建B(。A还使用ptrace跟踪捕获B的int 3
指令的B(类似于某种沙箱(。
我想使用GDB来调试进程B。当我尝试GDB附加子进程B时,它显示了一个错误,即B已经在调试中。那么,我有办法调试已经在另一个"调试器"下的子进程吗?
在我的情况下,A和B有交互,我不能直接修补或重写A中的代码来禁用ptrace函数。
那么我有办法调试已经在另一个"调试器"下的子进程吗?
否。
拥有一个由其父级ptrace
'd的子级,以及两者之间的非平凡交互,是为数不多的有效反调试技术之一。
要调试B
,您必须在没有A
沙盒的情况下运行它,并且必须通过"模拟"进程A
通常通过GDB处理B
的方式来复制A
和B
之间的交互。