set follow-fork-mode
,但是gdb无法将文件识别为可执行文件(可能是由于删除了与节有关的信息)。使用radare2,我可以分解甚至调试,但是在叉发生后,我不知道如何跟随孩子。我要这样做是因为孩子包含以下指令:0x0804898a jmp dword [edx*4 + 0x8049334]
我想在那里停下来检查edx,以了解跳转的位置。 >
我对能够调试子进程的任何工具或方法都很感兴趣。
#1 楼
发生派生时,使用dbg.forks=true
停止调试器。然后使用dp
列出并选择您要跟踪的pid。#2 楼
使用radee2的第一件事是确保您正在运行最新的git版本。要获得有关radee2中命令的帮助,可以使用?
字符。要获取有关配置变量的帮助,可以使用e??
(因为e?
会为您提供有关如何使用它们的帮助,而不是列出它们)。由于变量很多,您可以使用内部grep命令对其进行过滤: > 很显然,您要查找的变量是
~
,将其设置为true:遇到e dbg.<tab>
时,它将停止该过程。您可以使用dbg.fork
-命令更改pid:[0x00000000]> e??dbg dbg.args: Set the args of the program to debug dbg.backend: Select the debugger backend dbg.bep: break on entrypoint (loader, entry, constructor, main) dbg.bpinmaps: Force breakpoints to be inside a valid map dbg.bpsize: Size of software breakpoints dbg.btalgo: Select backtrace algorithm dbg.btdepth: Depth of backtrace dbg.clone: Stop execution if new thread is created dbg.execs: Stop execution if new thread is created dbg.follow: Follow program counter when pc > core->offset + dbg.follow dbg.forks: Stop execution if fork() is done (see dbg.threads) dbg.libs: If set stop when loading matching libname dbg.profile: Path to RRunProfile file dbg.shallow_trace: While tracing, avoid following calls outside specified range dbg.slow: Show stack and regs in visual mode in a slow but verbose mode dbg.status: Set cmd.prompt to '.dr*' or '.dr*;drd;sr PC;pi 1;s-' dbg.swstep: Force use of software steps (code analysis+breakpoint) dbg.threads: Stop all threads when debugger breaks (see dbg.forks) dbg.trace: Trace program execution (see asm.trace) dbg.trace.tag: Trace tag dbg.unlibs: If set stop when unloading matching libname [0x00000000]>
#3 楼
Radare2具有与dbg.follow.child
等效的配置变量set follow-fork-mod
。 e??~fork
dbg.follow.child: Continue tracing the child process on fork. By default the parent process is traced
使用命令
e dbg.follow.child = true
,或用
-e
发射雷达时:r2 -e dbg.follow.child=true -d ./my_binary