0

看着一些拆卸和第一个指令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>

现在我看起来更多,我觉得我不明白堆栈是如何被读取的。任何澄清将不胜感激,感谢您的时间。

编辑:澄清。

4

1 回答 1

2

您的 ebp 指向 0xffffd368。指令是

mov eax, DWORD PTR [ebp+0x8]

这意味着0xffffd370将读取地址。查看堆栈转储,确实,在 处0xffffd370,有值0x00000001,它等于eaxs 的初始值。

于 2013-07-23T20:40:05.187 回答