在学习一些逆向工程时,我遇到了一些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添加到堆栈中?如果这是一个递归调用,这是有意义的,但它只是一个循环
1条答案
按热度按时间rslzwgfq1#
这可能是使用C调用约定,即“调用者清理”。这种约定允许变量参数函数,如printf,其中被调用者不知道堆栈上有多少参数。
你应该看的全部内容是:
add
可能是pop eax
,除非代码对值不感兴趣,所以它只是移动堆栈指针。