打印注册表信息以获取堆栈位置GDB

时间:2013-02-14 04:06:34

标签: assembly gdb stack-trace

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

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

1 个答案:

答案 0 :(得分: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 $

你当然应该将它包装在一个函数中。 e.g。

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

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