Ubuntu gdb尝试查看$esp地址的内存时无法访问该地址。

3

enter image description here

你好,
我正在VMWARE上运行Ubuntu,当我尝试访问$esp处的内存时,会出现如下屏幕截图中的错误。我已经尝试过谷歌搜寻答案,但大多数都太复杂了。
是否有任何配置需要我做才能使其工作?
我已经在我的实际Windows机器上运行了gdb,它没有这个问题。
谢谢。

3
由于 $esp 是完整堆栈指针的低32位,您是否考虑过在64位系统中最好查看由 $rsp 指向的内容? - Michael Petch
1个回答

11

你需要使用$rsp,而不是$esp

使用 $esp,你得到了符号扩展的32位截断值,该值指向neverland。

注意:GDB提供$sp伪寄存器,它自动映射到给定平台的正确堆栈指针寄存器。

(gdb) p $rsp
$1 = (void *) 0x7fffffffe178
(gdb) p $sp
$2 = (void *) 0x7fffffffe178
(gdb) p $esp
$3 = -7816
(gdb) p/x $esp
$4 = 0xffffe178

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接