C语言_函数调用过程(栈帧)
来源:互联网 发布:使用ajax前台显示数据 编辑:程序博客网 时间:2024/06/08 07:36
首先举个栗子:
#include <stdio,h>int add(int x,int y){ int c=0; c=x+y return c;}int main(){ int a=1; int b=2; int c=0; c=add(a,b);}
在这个程序里,函数被调用才会发挥函数的功能,而函数的调用其实是一个过程,在这个过程计算机要为函数开辟栈空间,用于本次函数临时变量的保存和现场保护,这块空间称为函数的栈帧。现场保护的作用是为了在调用完另一个函数,返回时能回到上一个函数的运行的地方。 在栈帧里,靠ebp和esp维护栈的栈底和栈顶指针。在内存里,变量的保存是从高地址向低地址。 首先main函数其实被__tmainCRTStartup函数调用,而__tmainCRTStartup函数在mainCRTStartup被调用 main函数的调用过程: (1)首先压栈ebp,方便函数返回后的现场还原,再把esp的值赋给ebp,产生新 的ebp; (2)再给esp减去一个十六进制数,产生一个新的esp; (3)依次压栈ebx、esi、edi,然后把edi移到栈顶的有效地址处; (4)初始化edi到ebp的空间; (5)以此从高地址处给变量开辟空间;
(6)调用add函数:
(1)参数压栈,形参从右往左依次压入,先b 后a;
(2)现场保护,把调用add函数时main函数运行时的地址压栈;
(3)把ebp压栈;把esp的值赋给ebp,产生add的ebp;
(4)再给esp减去一个十六进制数,产生一个add的esp;
(5)类似上述mian函数的步骤;
调用完成之后释放调用函数的栈帧空间,回到原来环境。
阅读全文
0 0
- C语言_函数调用过程(栈帧)
- C语言函数调用过程--栈帧
- 【C语言】函数调用过程解析(栈帧)
- C语言,函数的调用过程(栈帧)
- C语言 函数的调用过程(栈帧)
- c语言函数调用过程
- C语言函数调用过程
- c语言 调用函数过程
- C语言(函数)调用过程(略译)
- c语言函数调用详细过程
- C语言 — 函数调用过程。
- C语言中函数调用过程
- C语言函数堆栈调用过程
- C语言中函数的调用过程
- C语言中的函数调用(栈帧)
- c语言_函数指针的调用方法
- C语言_函数
- C语言_函数
- freemarker模板生成word文件
- 教你10分钟完成一个自己的微信商城云服务器
- float f = 3.4是否正确
- IBM Cognos 11链接Hadoop最佳实践
- <div>的display属性和visibility属性
- C语言_函数调用过程(栈帧)
- altera内部 的 单口ram,双口ram介绍
- 小程序silk 文件转换 wav
- android stdio异常关闭导致build缓存出现问题
- shell 脚本批量删除redis中wwww前缀的key值
- java platform se binary 已停止工作的解决办法
- hibernate实现非主键映射外键双向多对一关系
- 多线程
- VMwareの基礎