我是 Assembly 的新手,正在阅读有关 x86 中的调用约定的信息。
在以下示例之一中。
cdecl int MyFunction1(int a, int b)
{
return a + b;
}
x = MyFunction1(2, 3);
_MyFunction1:
push ebp
mov ebp, esp
mov eax, [ebp + 8]
mov edx, [ebp + 12]
add eax, edx
pop ebp
ret
push 3
push 2
call _MyFunction1
add esp, 8
我能够理解给定代码的大部分内容,但对 pop ebp 已完成的一行有疑问。
我认为正确的调用将是“pop [ebp+4]”,因为在 push ebp 之后,执行 mov ebp,esp 导致 ebp 指针减 4,因此要到达原始位置必须向 ebp 添加 4 个字节。