函数调用时,栈帧的创建与销毁

栈帧的创建与销毁

这里我们写一个简单的加法函数来分析:

#include<stdio.h>
int Add(int x,int y)
{
    int z=0;
    z=x+y;
    return z;
}
int main()
{
    int a=10;
    int b=20;
    int c=0;
    c=Add(a,b);
    printf("%d\n",c);
    system("pause");
    return 0;
}

要研究函数的调用过程,我们需要用到对应的汇编代码,见下图(第一部分)
这里写图片描述

第一步:为main函数创建栈帧

首先栈帧的维护需要用到ebp和esp两个寄存器
调用函数时,ebp指向栈底,esp指向栈顶
这里写图片描述
这里写图片描述

第二步:准备对Add函数的调用

对应的反汇编代码(第二部分)

这里写图片描述

进入Add函数

对应的反汇编代码(第三部分)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/S_Sandra/article/details/80040382