C Gdb无法访问地址处的内存

C Gdb无法访问地址处的内存,c,linux,gdb,C,Linux,Gdb,我想在UPtest函数中使用断点来停止0x000000000040124c 运行111 222 333 我需要在堆栈顶部显示32条记录 x/32wx$esp,但show无法访问地址0xFFFFFFFFFF0A0处的内存 我想找到主程序的返回地址,如何更改它以显示它?如下图所示 您遇到的问题是,$esp寄存器是32位的,但目标上的地址是64位的。当您执行x/32wx$espGDB正在读取$rsp寄存器时,该寄存器的值为0x7fffffffffe0a0,并将其屏蔽为32位,因此0xffffff0

我想在UPtest函数中使用断点来停止0x000000000040124c

运行111 222 333 我需要在堆栈顶部显示32条记录

x/32wx$esp,但show无法访问地址0xFFFFFFFFFF0A0处的内存

我想找到主程序的返回地址,如何更改它以显示它?如下图所示


您遇到的问题是,
$esp
寄存器是32位的,但目标上的地址是64位的。当您执行
x/32wx$esp
GDB正在读取
$rsp
寄存器时,该寄存器的值为
0x7fffffffffe0a0
,并将其屏蔽为32位,因此
0xffffff0a0
,然后它是扩展到64位的符号,给出
0xffffffffffff0a0


试试
x/32wx$rsp
,你会有更多的运气。

也许你可以键入
x/32wx 0x7fffffffffe0a0
如果你使用的是引用
$esp
的旧教科书,你可以通过在所有
gcc
命令中添加
-m32
选项来接近他们的期望。