当前位置: 代码迷 >> 汇编语言 >> 反汇编遇到的的堆栈有关问题
  详细解决方案

反汇编遇到的的堆栈有关问题

热度:4990   发布时间:2013-02-26 00:00:00.0
反汇编遇到的的堆栈问题!
两段简单的验证参数的反汇编代码,但是在计算了下堆栈中参数的位置,发现不太对,可能是我理解有问题,请各位指点下。谢谢。
1:
push   ebp
mov     ebp   ,   esp
push   ebx  
mov     ebx   ,   [ebp   +   arg_c]   //arg_c=14h
push   esi
push   edi
xor     edi   ,   edi
cmp     ebx   ,   edi
jnz     loc_7caaaaaa
这段代码注释说是验证第6个参数是否为空,但是ebp+14h后应该指向的第四个参数啊!
2:
push   ebp
mov   ebp,   esp
sub   esp,   414h  
push   ebx
push   esi
xor   esi,   esi
push   edi
cmp   [ebp+arg_0],   esi   //arg_0=8,判断4号串地址是否为空
mov   edi,   ds:__imp_wcslen
mov   ebx,   411h
jz   short   loc_7517FCED  
这个更夸张,怎么会是第四个参数呢?

我理解的堆栈:
低地址《------------------------------------高地址
|ebp|ret|参数1|参数2|参数3|参数4|参数5|参数6|

不知道哪里错了,请各位指点下,谢谢了!




------解决方案--------------------------------------------------------
1.就arg_c=14h来说,是第六个堆栈参数,但是前面两个堆栈参数是ebp与ebx,所以,的确是逻辑意义上所说的第四参。
2.arg_0=8,判断4号串地址是否为空,为什么是第四参?不知道,也许前面有两个的参数类型是word的呢?有点乱,不求甚解啦。搞反汇编不用弄得这么清楚我觉得。
------解决方案--------------------------------------------------------
2:
push ebp
mov ebp, esp
sub esp, 414h
push ebx
push esi
xor esi, esi
push edi
cmp [ebp+arg_0], esi //arg_0=8,判断4号串地址是否为空
mov edi, ds:__imp_wcslen
mov ebx, 411h
jz short loc_7517FCED
这个更夸张,怎么会是第四个参数呢?
------------------------------------------
这个是指向第一个参数。
------解决方案--------------------------------------------------------
楼主理解的没有错,这是我模拟的一个函数堆栈情况:

ebp ==> > /0013FF80
ebp +4 > |00401020 返回到 B.00401020 来自 B.00401000
ebp +8 > |00000001 //下面为参数
ebp +C > |00000002
ebp +10 > |00000003
ebp +14 > |00000004
ebp +18 > |00000005
ebp +1C > |00000006
ebp +20 > ]0013FFC0

  相关解决方案