本文主要是介绍函数调用的具体过程以及栈帧的创建和销毁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里用一个简单的Add加法程序讲解函数调用过程
#include <stdio.h>
#include <windows.h>
#include <assert.h>int Add(int x, int y)
{int z = 0;z = x + y;return z;
}int main()
{int a = 1;int b = 2;int ret = 0;ret = Add(a, b);system("pause");return 0;
}
先从主函数部分开始。
首先创建mainCRTStartup函数的栈帧。
esp栈顶指针减0E4(228),开辟了228字节大小空间。
接着又压入3个寄存器ebx、esi、edi
然后用下面代码把开辟的空间初始化为cc cc cc cc
接下来就是创建局部变量a,b,ret并赋值。
然后便开始传参
call调用Add函数,并且调用前保存了call指定的下一条指定的地址。main函数
》
开始Add部分
刚开始也是一样为Add函数创建栈帧
接着创建z变量,赋值为0
把x放到eax中
把y也加到eax中
把eax放到z里面
Add到这就差不多结束了,开始return z,z放到eax里,把寄存器变量传回去;
pop出栈
Add函数
这篇关于函数调用的具体过程以及栈帧的创建和销毁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!