__declspec(naked)(裸函数)和__asm

__declspec(naked) 是告诉编译器 不要对函数进行优化  函数的所有实现包括堆栈的平衡   参数的压栈 ebp的赋值 还原 都要我们来做

甚至是ret / ret n  都要我们来做

 

演示代码

int add ( int a, int b ) { return a + b; } // 有压栈,又要有出栈,这样才能使堆栈平衡。 __declspec(naked)add2( int a, int b ) { __asm { push ebp mov ebp,esp push [ebp + 0ch] push [ebp + 8h] call add mov edx, [ebp + 8h] pop edx mov edx, [ebp + 0ch] pop edx mov esp, ebp pop ebp ret 0x8 } }

你可能感兴趣的:(__declspec(naked)(裸函数)和__asm)