如何计算堆栈清理值(retn)?

时间:2017-10-31 20:54:16

标签: assembly x86 reverse-engineering

我正在尝试学习一点逆向工程。我理解这些概念,但有一些具体问题,我在平方时遇到了麻烦。下面的功能来自我决定拆解和研究的文件。我知道这是一个__stdcall由retn但我无法弄清楚如何计算0x1c值。这是来自IDA,它显示了函数的4个参数,它们等于32个字节(20h)。即使在函数中间有堆栈空间请求(sub esp,10h),我也看不到retn 1ch的来源。

arg_0           = dword ptr  8
arg_4           = byte ptr  0Ch
arg_14          = dword ptr  1Ch
arg_18          = dword ptr  20h

             mov     edi, edi
             push    ebp
             mov     ebp, esp
             push    esi
             push    edi
             push    dword ptr [ebp+20h]
             mov     eax, [ecx]
             push    [ebp+arg_14]
             lea     esi, [ebp+0Ch]
             push    3
             push    3
             sub     esp, 10h
             mov     edi, esp
             push    dword ptr [ebp+8]
             movsd
             movsd
             movsd
             movsd
             call    dword ptr [eax+18h]
             pop     edi
             pop     esi
             pop     ebp
             retn    1Ch

0 个答案:

没有答案