在检查GDB中的C二进制文件时,如何在堆栈上一次打印多个值?我希望输出类似于以下内容:
0xbfc3ff70: 0xb7f4bff4 0xb7f89ce0 0x00000000 0xbfc3ff98
0xbfc3ff80: 0xb7e4c943 0xb7f4c4e0 0x08048930 0xbfc3ffa4
0xbfc3ff90: 0xbfc3ffa4 0xb7f4bff4 0xbfc3ffb8 0x08048625
0xbfc3ffa0: 0x08048930 0xb7f81660 0x00000000 0xbfc45318
答案 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时都可以使用它。