__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 了。

本文介绍了一个使用__declspec(naked)修饰符定义的加法函数的实现细节,展示了如何通过直接操控寄存器来完成两个整数相加的过程。特别地,文章分析了函数不使用标准调用约定时,参数传递及栈帧管理的具体方式。
1057

被折叠的 条评论
为什么被折叠?



