千家信息网

如何进行C语言函数栈帧的创建和销毁分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,如何进行C语言函数栈帧的创建和销毁分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。以下是我们平时接触过,但不了解的问题:1.为什么
千家信息网最后更新 2025年01月20日如何进行C语言函数栈帧的创建和销毁分析

如何进行C语言函数栈帧的创建和销毁分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

以下是我们平时接触过,但不了解的问题:

1.为什么局部变量在未赋值前是随机的。

2.局部变量创建的过程。

3.函数传参,传参的顺序问题、

4.形参与实参的关系什么。

5.调用函数是怎么调用的,调用的过程是什么。

6.调用函数结束后,是怎样返回的。

这些问题我们在学校可能并不会接触,也不会出现在考试的试卷上,但是作为计算机专业的学生,做一些认识和了解是很有必要的。这就相当于我们的内功,在以后深入学习时,就能够更快的理解和认识。下面就是函数调用的整个过程,学习完之后,对以上的问题就有一个答案了。

函数栈帧就是系统分配给函数的空间,存放的是地址。

而esp ebp,作用是来维护函数栈帧。

esp ebp跟eax ebx ecx edx一样,就是系统的寄存器,有一定的存储功能。

下面就以这个函数为例

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);return 0;}

main函数和其他函数一样,main函数也是被调用的函数。

其基本逻辑是mainCRTStartup调用_tmainCRTStartup调用main函数

程序运行时,ebp与ebp维护_tmainCRTStartup,起初esp处在栈顶指针的位置,而ebp处于栈底的位置。

首先push,继续压栈操作,把ebp的地址打印到esp的位置上 ,再把esp的值代到ebp中,esp再加上oE4h的内存编号,就形成了下图情况。

此时ebp与esp就来维护main函数,在进行三次push压栈,将ebx,esi,edi,压到栈顶。其目的是让系统正常的运行。

接下来接是lev mov mov的操作,就让esp与ebp之间的空间的内容全部变为cccccc,这就是在变量未定义前,其值都是随机值的原因。

接下来就要定义变量abc了,那系统是怎样在栈区,给abc留有空间来定义的了?就是以下三步来实现的~这就为abc分配了空间。

结果如图

当abc定义后,接下来就是函数调用,函数传参的过程。

系统是先将ab的值分别放在eax ecx的寄存器中。

下面这个操作跟main函数开辟空间是类似的。

下面蓝色部分,是函数的传参过程,由图易知。 函数传参实际上只是将ab的值保存在寄存器中,在临时拷贝给x和y。

此时ebp-8的位置就是z所在的空间,再储存再寄存器中。

然后再将edi esi ebx弹出,ebp的地址传给esp,再将ebp弹出,ebp与esp回到原来的位置,重新来维护main函数。

把储存在寄存器中z的值传给c

关于如何进行C语言函数栈帧的创建和销毁分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

函数 就是 问题 空间 位置 寄存器 过程 变量 系统 分析 接下来 地址 语言 内容 局部 更多 学习 帮助 接触 解答 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海誉点网络技术 深圳华辰软件开发科技公司 软件开发三大方向 电脑无法接收服务器的信息吗 软件开发工资多少前景如何 网络安全英语讨论 编程中打入数据库的三线格 数据库触发器怎么恢复 定期修改数据库密码 老头环无法连接至服务器 勒索病毒可以修复数据库吗 网络安全知识竞赛英语翻译 东土科技和工业互联网产品 店数科技互联网公司 傲雷软件开发工程师面试题 深圳计算机应用软件开发定做 异种服务器连接错误 阿里云服务器连接密码 服务器bios学习 笔记本怎么搭建虚拟服务器 阿里云服务器 域名解析 广州智慧园区软件开发解决方案 北京晓通网络技术有限公司 360软件开发平台注册 魔兽世界多开不显示服务器 德州安卓软件开发公司 国防网络安全支出 内蒙古网络安全认证公司 剑灵道具属性在本地还是服务器 互联网科技公司会计账务处理
0