我被調試用gdb我的代碼,和過這個問題跑 GDB的顯示如下:ESP彙編代碼約RET
(gdb) ni
0x08048ca5 in getbufn()
(gdb) disas 0x08048c98
Dump of assembler code for function getbufn:
0x08048c89 <+0>: push %ebp
0x08048c8a <+1>: mov %esp,%ebp
0x08048c8c <+3>: sub $0x208,%esp
0x08048c92 <+9>: lea -0x200(%ebp),%eax
0x08048c98 <+15>: mov %eax,(%esp)
0x08048c9b <+18>: call 0x8048bf4 <Gets>
0x08048ca0 <+23>: mov $0x1,%eax
=> 0x08048ca5 <+28>: leave
0x08048ca6 <+29>: ret
End of assembler dump.
(gdb) p /x $ebp
$1 = 0x55683950
(gdb) p /x $esp
$2 = 0x55683748
(gdb) ni
0x08048ca6 in getbufn()
(gdb) p /x $ebp
$3 = 0x4030201
(gdb) p /x $esp
$4 = 0x55683954
(gdb) x /1xw $esp
0x55683954: 0x55683750
(gdb) si
Cannot access memory at address 0x4030205
(gdb)
在0x08048ca6的代碼是「RET」的,這意味着JMP(% ),addl 0x4,%esp 所以我想知道爲什麼gdb的最後一句話是「無法訪問地址0x4030205處的內存」 是否應該在地址0x55683750處執行指令代碼?
Thx!
+1對於實際使用調試器:)(不像成千上萬的其他問題!) – huon
PS:值0x55683750看起來像一個文本字符串可疑:「Wh7P」 – paulsm4
這是他'離開',而不是'ret '那崩潰。 – hirschhornsalz