assembly 堆栈指针附加循环

eblbsuwk  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(80)

在学习一些逆向工程时,我遇到了一些x86汇编中的循环示例

00401036        mov     [ebp+var_4], 0
0040103D        mov     [ebp+var_8], 0
00401044 loc_401044:
00401044        cmp     [ebp+var_4], 0
00401048        jnz     short loc_401063 
0040104A        call    performAction
0040104F        mov     [ebp+var_8], eax
00401052        mov     eax, [ebp+var_8]
00401055        push    eax
00401056        call    checkResult
0040105B        add     esp, 4
0040105E        mov     [ebp+var_4], eax
00401061        jmp     short loc_401044

根据我的理解,esp是堆栈指针,所以:为什么要将4添加到堆栈中?如果这是一个递归调用,这是有意义的,但它只是一个循环

rslzwgfq

rslzwgfq1#

这可能是使用C调用约定,即“调用者清理”。这种约定允许变量参数函数,如printf,其中被调用者不知道堆栈上有多少参数。
你应该看的全部内容是:

00401055        push    eax // argument for checkResult
00401056        call    checkResult
0040105B        add     esp, 4 // clean up the argument

add可能是pop eax,除非代码对值不感兴趣,所以它只是移动堆栈指针。

相关问题