1
0x0804889a <+361>: mov %eax,0xc(%esp)
0x0804889e <+365>: movl $0x2b,0x8(%esp)
0x080488a6 <+373>: movl $0x1,0x4(%esp)
0x080488ae <+381>: movl $0x8048ab0,(%esp)
程序尤指將數據添加到%ESP讀取(最後一行是從存儲器中的字符串,我可以探測)如何使用gdb
目前我打破在上述的最後一行。和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的全部價值?
'0xffffd704'在進程的內核空間中,'gdb'不能轉儲內核空間。你應該使用'kgtp'來幫助你。從'ebp'的值來看,我認爲堆棧空間被溢出損壞了。 – 2014-09-28 03:39:22
@NanXiao如果你在64位的linux下運行32位程序,你將得到該範圍內的堆棧,並且這通常是可訪問的用戶空間。但是,如問題所示,'gdb'確實無法轉儲該內存。 – Jester 2014-09-28 21:46:47
確實在64位linux上運行。但該程序作者聲稱已經編譯爲64位。即使我只能在gdb上運行它,如果拱=== i386。 – gcb 2014-09-30 01:33:26