debugging - 如何使用gdb读取 esp

  显示原文与译文双语对照的内容
0 0

 0x0804889a <+361>: mov %eax,0xc(%esp)
 0x0804889e <+365>: movl $0x2b,0x8(%esp)
 0x080488a6 <+373>: movl $0x1,0x4(%esp)
 0x080488ae <+381>: movl $0x8048ab0,(%esp)

程序正在向 %esp 添加数据( 最后一行是我可以探测的内存中的字符串)

我目前正在突破上述最后一行。 还有 info registers


esp 0xffffd704 0xffffd704

当我尝试 display 时,我得到


$esp = (void *) 0xffffd704

如果我想把它扔掉


(gdb) dump memory mem2 0xffffd704 0xffffffff
Cannot access memory at address 0xffffd704

(gdb) info mem
Using user-defined memory regions.
There are no memory regions defined.

我如何才能看到esp的全部价值?

时间: 原作者:

0 0

错误消息是误导性的。 根据我的测试,gdb 打印出,如果范围中的任何字节不可访问。 因此,问题是结束地址。 你可以从 /proc/<pid>/maps 获取堆栈顶部,例如对于我的测试程序:


$ grep stack/proc/8277/maps
fffdd000-ffffe000 rw-p 00000000 00:00 0 [stack]

gdb 能够在没有问题的情况下转储内存。

当然,如果你只想读取特定的值,你可以使用 x ( 检查。) 命令。

原作者:
...