查看一些反汇编和第一个mov eax,DWORD PTR [ebp+0x8]
0xf7fda858
。
我迈出了一步,但是eax没有改变。我读错了堆栈吗?我是gdb的新手,所以它肯定是可能的。
9: x/16xw $esp
0xffffd350: 0xf7fbdff4 0x00000000 0x00000000 0xffffd368
0xffffd360: 0x0804870a 0xf7fbdff4 0x00000000 0xf7e324d3
0xffffd370: 0x00000001 0xffffd404 0xffffd40c 0xf7fda858
0xffffd380: 0x00000000 0xffffd41c 0xffffd40c 0x00000000
8: /x $ebp = 0xffffd368
7: /x $esi = 0x0
6: /x $edi = 0x0
5: /x $edx = 0xffffd394
4: /x $ecx = 0xffffd404
3: /x $ebx = 0xf7fbdff4
2: /x $eax = 0x1
1: x/10i $eip
=> 0x80489b7 <main+7>: mov eax,DWORD PTR [ebp+0x8]
0x80489ba <main+10>: mov ebx,DWORD PTR [ebp+0xc]
0x80489bd <main+13>: cmp eax,0x1
踩到后:
9: x/16xw $esp
0xffffd350: 0xf7fbdff4 0x00000000 0x00000000 0xffffd368
0xffffd360: 0x0804870a 0xf7fbdff4 0x00000000 0xf7e324d3
0xffffd370: 0x00000001 0xffffd404 0xffffd40c 0xf7fda858
0xffffd380: 0x00000000 0xffffd41c 0xffffd40c 0x00000000
8: /x $ebp = 0xffffd368
7: /x $esi = 0x0
6: /x $edi = 0x0
5: /x $edx = 0xffffd394
4: /x $ecx = 0xffffd404
3: /x $ebx = 0xf7fbdff4
2: /x $eax = 0x1
1: x/10i $eip
=> 0x80489ba <main+10>: mov ebx,DWORD PTR [ebp+0xc]
0x80489bd <main+13>: cmp eax,0x1
0x80489c0 <main+16>: jne 0x80489d0 <main+32>
现在我看起来更多,我感觉我不明白堆栈是如何被阅读的。非常感谢您的澄清,感谢您的时间。
编辑:澄清。答案 0 :(得分:2)
你的ebp指向0xffffd368。指令是
mov eax, DWORD PTR [ebp+0x8]
表示将读取地址0xffffd370
。实际上,在0xffffd370
处查看堆栈转储时,值0x00000001
等于eax
的初始值。