Debugging 如何用gdb阅读esp
当我试图Debugging 如何用gdb阅读esp,debugging,memory,assembly,gdb,Debugging,Memory,Assembly,Gdb,当我试图显示时,我得到了 esp 0xffffd704 0xffffd704 如果我想甩掉它 $esp = (void *) 0xffffd704 如何查看esp的完整值?错误消息具有误导性。根据我的测试,gdb打印该范围内的任何字节是否不可访问。因此,问题在于结束地址。您可以从/proc//maps获取堆栈顶部,例如,对于我得到的测试程序: (gdb) dump memory mem2 0xffffd704 0xffffffff Cannot access
显示时,我得到了
esp 0xffffd704 0xffffd704
如果我想甩掉它
$esp = (void *) 0xffffd704
如何查看esp的完整值?错误消息具有误导性。根据我的测试,gdb
打印该范围内的任何字节是否不可访问。因此,问题在于结束地址。您可以从/proc//maps
获取堆栈顶部,例如,对于我得到的测试程序:
(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.
gdb
能够毫无问题地转储该内存范围
当然,如果您只想读取感兴趣的特定值,可以使用x
(检查)命令。进程的内核空间中有0xffffd704
,而gdb
不能转储内核空间。您应该使用kgtp
来帮助您。从ebp
的值来看,我认为堆栈空间已被溢出损坏。@NanXiao如果在64位linux下运行32位程序,您将获得该范围内的堆栈,这通常是可访问的用户空间。然而,gdb
确实无法转储该内存,如问题所示。这确实在64位linux中运行。但该程序作者声称它也编译为64位。即使只有当arch==i386时,我才能在gdb上运行它。
(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.
$ grep stack /proc/8277/maps
fffdd000-ffffe000 rw-p 00000000 00:00 0 [stack]