0

在 GDB 中检查 C 二进制文件时,如何一次打印出堆栈上的多个值?我想要类似于以下的输出:

0xbfc3ff70:     0xb7f4bff4      0xb7f89ce0      0x00000000      0xbfc3ff98
0xbfc3ff80:     0xb7e4c943      0xb7f4c4e0      0x08048930      0xbfc3ffa4
0xbfc3ff90:     0xbfc3ffa4      0xb7f4bff4      0xbfc3ffb8      0x08048625
0xbfc3ffa0:     0x08048930      0xb7f81660      0x00000000      0xbfc45318
4

1 回答 1

0

您可以使用 $sp 来引用堆栈寄存器,使用 printf 来打印堆栈中的值(就像在 C 中那样),然后只需将参数转换为 printf:

db $ printf "[%08X] 0x%08X 0x%08X 0x%08X 0x%08X\n", \
    $sp,                        \
    *(unsigned int *) $sp,      \
    *(unsigned int *)($sp + 4), \
    *(unsigned int *)($sp + 8), \
    *(unsigned int *)($sp +12)
[FFFFE080] 0x00000000 0x00000000 0xF7A3C76D 0x00000000
db $

您当然应该将其包装在一个函数中。例如

define stackdump
    printf... # show bytes 0-15
    printf... # show bytes 15-31
    printf... # show bytes 32-47
end

...并将其粘贴到您的 ~/.gdbinit 中,以便每次运行 gdb 时都可以使用它。

于 2013-02-15T05:56:57.917 回答