gdb如何向后检查内存

Pat*_*ick 4 debugging gdb stack-trace

如果我有一个地址 0x7ffffffff000,它位于堆栈顶部。我想检查堆栈的全部内容,因此我需要将其显示到较低的地址。

目前,我做

x/16x 0x7ffffffff000-64
Run Code Online (Sandbox Code Playgroud)

但这仍然显示从低到高。

0x7fffffffefc0: 0x782f756c  0x68747561  0x7469726f  0x43430079
0x7fffffffefd0: 0x45484341  0x5341485f  0x52494448  0x682f003d
0x7fffffffefe0: 0x2f656d6f  0x756c7079  0x7065722f  0x652f736f
0x7fffffffeff0: 0x742f7078  0x00747365  0x00000000  0x00000000
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的

x/-16x 0x7ffffffff000
0x7fffffffeff0: 0x742f7078  0x00747365  0x00000000  0x00000000
0x7fffffffefe0: 0x2f656d6f  0x756c7079  0x7065722f  0x652f736f
0x7fffffffefd0: 0x45484341  0x5341485f  0x52494448  0x682f003d
0x7fffffffefc0: 0x782f756c  0x68747561  0x7469726f  0x43430079
Run Code Online (Sandbox Code Playgroud)

是否有一些神奇的 gdb 命令可以完成我想要的操作?

xhi*_*nne 5

根据此消息,该功能最近已添加到 gdb 7.12 中:

GDB 现在支持“x”命令中的负重复计数,以从给定地址向后检查内存。

您只需输入:

(gdb) x/-16x $rsp
Run Code Online (Sandbox Code Playgroud)

  • 他想打印按地址向后格式化的相同内容,而不是向后打印内容。 (2认同)