Nake返回值的接收,可以在函数外部定义局部变量接收
#include "stdio.h"
_declspec(naked) int Add(int x,int y)
{
_asm
{
push ebp;
mov ebp,esp;
sub esp,0x48;
push ecx
push edi
push esi
mov ecx,0xc;
xor eax,eax
lea edi,[ebp-0x48]
rep stosd
mov eax,[ebp+0x8]; //x
add eax,[ebp+0xc];//x+y
pop esi
pop edi
pop ecx
mov esp,ebp;
pop ebp;
ret
}
}
void mainx()
{
int r=Add(4,5);
printf("r=%d",r);
getchar();
}
void main()
{
int r; //局部变量[ebp-0x4],内联ASM支持 mov r,eax 这里的r编译器默认
int x=1;
_asm
{
push 0x5;
push 0x4;
call Add;
//mov dword ptr[ebp-4],eax;
// mov r,[ebp-4];
mov r,eax
add esp,0x8;
}
printf("r+x=%d",r+x);
}