__declspec(naked) int add(int a, int b) { _asm { mov eax, dword ptr [esp + 0x4] add eax, dword ptr [esp + 0x8] ret } }
函数 __declspec(naked) int add(int a, int b) 生成的汇编代码
:00401BCC 8B442404 mov eax, dword ptr [esp+04] :00401BD0 03442408 add eax, dword ptr [esp+08] :00401BD4 C3 ret
因为函数开头没有
push ebp mov ebp, esp
ebp没有入栈,所以函数参数地址就是 esp + 0x4 和 esp + 0x8 了。自然函数结束也不需要 pop ebp 了。