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);
}

 

posted @ 2021-09-24 10:09  admrty  阅读(88)  评论(0)    收藏  举报