【C】函数整个调用过程即函数栈帧!
来源:互联网 发布:ubuntu u盘制作工具 编辑:程序博客网 时间:2024/06/05 14:27
在c语言中,函数从内存的角度来分析函数的整个调用过程呢!
1、首先了解两个寄存器变量,esp和ebp,他们分别是存放的是栈顶的地址和栈底的地址。
2、要观察函数的调用过程需要从汇编代码开始分析。
#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 ret = 0;ret = Add(a,b); printf("%d\n",ret);return 0;}
下图是函数调用的简单草图
首先进入的是tmainCRTStarup函数,这个函数是在调用main函数之前就已经被调用了,
在调用这个函数的时候会自动的分配好栈顶和栈底,并且在栈底和栈顶开辟出来一片内存,并初始化为ccccccccc
接下来就是创建局部变量是a和b,如图中的蓝线所指部分。
遇到函数的调用时,将实参进行拷贝,传到函数的形参里。
这里需要注意的是在对函数进行调用前需要对函数的入口进行保护现场操作,即对函数调用时进行地址存储
接下里就是这里主要的部分-----对函数的调用
在对函数调用时,首先会对内存进行压栈,即将main函数的ebp压到函数调用的内存底端。
再接下来就是开辟一块内存在进行函数的参数的创建,当函数完成调用后,要将所得结果返回,这是内存会进行将数据弹出,
当把esp指向和ebp所指向相同时,系统会弹出ebp的值,这是ebp将会指向,自然按而然的
esp就指向想函数所调用时所存储的地址,这是eax里存储的就是函数计算的结果
再将eax的值赋值给ret,经过输出即可得到数据结果。
到这里函数的调用就结束了
0 0
- 【C】函数整个调用过程即函数栈帧!
- 代码在内存中的分布。函数在栈中的调用过程,即函数的栈帧。
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- C函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- c函数调用过程原理及函数栈帧分析
- C函数调用过程
- C函数调用过程
- C函数调用过程
- C函数调用栈过程分析
- 函数栈帧(函数调用过程详解)
- adb不能连接电脑
- elasticsearch 5.x 笔记
- 学习淘淘商城第六十六课(商品详情缓存的实现)
- Java 集合
- Linux下/sys目录介绍
- 【C】函数整个调用过程即函数栈帧!
- Django的标准库django.contrib包介绍
- A1091. 组合输出
- 题解:Remove Invalid Parentheses
- thinkphp5隐藏入口文件失败 的解决方法
- xshell第一次用rz时
- AIDL——你的应用不孤单
- phpstorm2017.1注册方法
- 390. Elimination Game