在gdb中检查堆栈的正确方法是什么?

时间:2017-01-25 18:40:19

标签: debugging assembly gdb reverse-engineering

由于堆栈越来越多地变成了较小的addesses,因此使用gdb进行检查对我来说是很费劲的。到目前为止我使用

x/64xw 0xffffd0e8-64*4

如果我想看到位于0xffffd0e8(堆栈上)的值以及堆栈后面的值(在这种情况下是32位机器上的以下64个字)。

有更简单的方法吗?

另外,有没有办法用相应的变量名称自动标记堆栈上的内容?或者每行只显示一个单词,而不是四个单词?

1 个答案:

答案 0 :(得分:2)

如果您没有调试信息来帮助您,除了了解ABI并手动阅读之外没有其他任何事情可以做,在GDB的帮助下,您可以做得很好仅基于ABI的一组事物(如回溯,但没有命名调用者)。

如果您确实有二进制文件的调试信息,可以使用np.savetxt('test.csv', first_layer_output, delimiter=',') 列出所选堆栈帧的局部变量,并使用info localsframe,{在堆栈中导航{1}},btinfo frameinfo frame <address>etc

你无法真正注释&#34;内存,但你可以做的是创建convenience variables来动态创建GDB变量。

关于如何方便地读取大型内存数组,我发现使用up和转换地址非常有用。例如:down。并使用artifical arrays打印大区域。 GDB将聚合连续的相同值,使得非常清晰且易于读取同类内存区域(这不是堆栈的情况)。