函数调用

函数调用
cdcel

参数从右向左依次入栈

参数一
参数二
......
call...
add esp,xxx


返回地址入栈
保存EBP
局部变量分配空间


stdcall 堆栈被调用都自己恢复

void test()
{
    int t;  // ebp - 4
    scanf_s("%d", &t);
    __asm
    {
        mov ebx, t;     // 把t的值存入ebx寄存器
        mov eax, [ebp];// 取保存在堆栈里面EBP的值
        mov[eax-8], ebx; // 取变量m的地址
    }
}

int main(int argc,char **argv)
{
    int m = 0; // ebp - 8
    test();
    printf("m = %d\n",m);
    system("pause");
}

 

上面程序在test()函数中输入值,在main函数中打印出来

 

posted @ 2019-08-14 22:56  狂奔~  阅读(152)  评论(0编辑  收藏  举报