mov后,eax不接受参数

时间:2013-07-23 20:36:20

标签: assembly gdb

查看一些反汇编和第一个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>

现在我看起来更多,我感觉我不明白堆栈是如何被阅读的。非常感谢您的澄清,感谢您的时间。

编辑:澄清。

1 个答案:

答案 0 :(得分:2)

你的ebp指向0xffffd368。指令是

mov eax, DWORD PTR [ebp+0x8]

表示将读取地址0xffffd370。实际上,在0xffffd370处查看堆栈转储时,值0x00000001等于eax的初始值。