私は Assembly が初めてで、 x86 での呼び出し規約について読んでいます。
以下の例の 1 つ。
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 が実行された 1 行に疑問があります。
プッシュ ebp の後、 mov ebp 、esp が実行され、ebp ポインターが 4 減分され、元の位置に到達するには ebp に 4 バイトを追加する必要があるため、正しい呼び出しは「pop [ebp+4]」になると思います。