Qemu 上的 GDBserver 不尊重“follow-fork-mode child”

逆向工程 数据库 米普 奇木
2021-06-29 19:48:42

我使用的gdb-multiarch版本9.1在Ubuntu上连接到qemu-mipsel-static运行的daemonizes本身与MIPS应用程序版本4.2.0 fork(),以及正在运行内置的gdbserver这是相关的 GDB 输出:

Breakpoint 5, 0x7f5bb874 in daemon () from ./lib/libc.so.0

接下来的指令jalrfork

(gdb) si
0x7f5738e0 in fork () from ./lib/libc.so.0

现在我们进入了fork(),让我们检查一下状态follow-fork-mode

(gdb) show follow-fork-mode 
Debugger response to a program call of fork or vfork is "child".

一切看起来都不错,让我们完成函数并检查我们的返回值

(gdb) finish
Run till exit from #0  0x7f5738e0 in fork () from ./lib/libc.so.0
0x7f5bb87c in daemon () from ./lib/libc.so.0
(gdb) p $v0
$7 = 119052
(gdb) # what

PID 表明我们仍然附加到父进程

1个回答

文档

在大多数系统上,GDB 对使用 fork 函数创建附加进程的调试程序没有特殊支持。当程序 fork 时,GDB 会继续调试父进程,子进程将畅通无阻地运行。如果您在子进程执行的任何代码中设置了断点,子进程将获得一个 SIGTRAP 信号(除非它捕获到该信号)将导致它终止。

在某些系统上,GDB 支持调试程序,这些程序使用 fork 或 vfork 函数创建附加进程。在 GNU/Linux 平台上,内核版本 2.5.46 及更高版本支持此功能。

会不会是你的内核版本太低了?

您也可以尝试catch fork/vfork/exec 命令。