使用radare2 的第一件事是确保您运行的是最新的git 版本。
要获得有关radare2 中命令的帮助,您可以使用该?
字符。有关配置变量的帮助,您可以使用e??
(因为e?
会帮助您了解如何使用它们,而不是列出它们)。由于有很多变量,您可以使用内部 grep 命令过滤它们:~
。
[0x00000000]> e??dbg
dbg.args:设置要调试的程序的args
dbg.backend:选择调试器后端
dbg.bep:中断入口点(加载器、入口、构造函数、主)
dbg.bpinmaps:强制断点位于有效地图内
dbg.bpsize:软件断点的大小
dbg.btalgo:选择回溯算法
dbg.btdepth:回溯深度
dbg.clone:如果创建新线程则停止执行
dbg.execs:如果创建新线程则停止执行
dbg.follow:当 pc > core->offset + dbg.follow 时跟随程序计数器
dbg.forks:如果 fork() 完成则停止执行(参见 dbg.threads)
dbg.libs:如果在加载匹配的 libname 时设置停止
dbg.profile: RRunProfile 文件的路径
dbg.shallow_trace:跟踪时,避免跟随指定范围之外的调用
dbg.slow:以缓慢但详细的模式在可视模式下显示堆栈和注册表
dbg.status: 将 cmd.prompt 设置为 '.dr*' 或 '.dr*;drd;sr PC;pi 1;s-'
dbg.swstep:强制使用软件步骤(代码分析+断点)
dbg.threads:在调试器中断时停止所有线程(参见 dbg.forks)
dbg.trace:跟踪程序执行(见asm.trace)
dbg.trace.tag:跟踪标签
dbg.unlibs:如果在卸载匹配的 libname 时设置停止
[0x00000000]>
您也可以使用 use e dbg.<tab>
,因为有自动完成功能。
显然,您要查找的变量是dbg.fork
,将其设置为 true:这将在遇到fork()
. 您可以使用d
-command更改 pid :
[0x00000000]> d?~进程
| dH [handler] 将过程移植到新的处理者
| 执行打开过程(重新加载,'oo' 的别名)
| dp[?] 列表,附加到进程或线程 id
| dx[?] 在目标进程上注入和运行代码(参见 gs)
[0x00000000]> dp?
|用法:dp #处理命令
| dp 列出当前的 pid 和孩子的
| dp 列出pid的孩子
| dp* 列出所有可附加的 pid
| dp=选择pid
| dp- 分离选择 pid
| dpa 附加并选择pid
| dpe 显示可执行文件的路径
| dpf 像文件 fd 一样附加到 pid // HACK
| dpk 发送信号给进程
| dpn 创建新进程(fork)
| dpnt 创建新线程(克隆)
| dpt 列出当前pid的线程
| dpt 列出进程的线程
| dpt= 附加到线程
[0x00000000]