失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言函数调用原理底层分析

c语言函数调用原理底层分析

时间:2023-02-24 22:45:00

相关推荐

c语言函数调用原理底层分析

1函数的功能主要是为了复用性,不同的属性可以参数化

2函数调用机制

2.1按调用约定传递参数

2.1调用约定

调用方(caller)和被调方(callee)需要约定以下内容:

1传参顺序

2传递参数的媒介(是放栈还是寄存器)

3清理参数的责任归属

4返回值的传递媒介(返回值是放栈还是寄存器)

__cdecl:传参顺序从右往左;

使用栈顶传递参数;

由调用方清理参数;

__stdcall:传参顺序从右往左;

使用栈顶传递参数;

由被调方清理参数;

__fastcall传参顺序从右往左;

左边前两个基本属性类型的参数通过处理器传递,其余各参数使用栈 顶传递参数;

由被调用方清理参数;

2.2保存函数返回地址

2.2.1流程转移到被调用方

2.3保存调用方的栈底

2.4设置当前栈顶为被调用方的栈底(此时被调方处于空栈状态)

2.5根据局部变量所需的总空间抬高栈顶(为局部变量分配空间)

2.6保存处理器环境(把调用方的处理器中的值复制到栈顶(不保存的话,调用方寄存 器的值会被被调方覆盖))

2.7debug选项组在此时设置局部变量的初值为0xcccccccc

2.8执行函数体

2.9恢复处理器的环境(把栈顶的值复制到处理器中)

2.10释放局部变量空间

2.11从栈顶取值恢复到调用方的栈底

2.12从栈顶取值作为返回地址

2.12.1__stdcall,__fastcal被调用方此时释放参数空间

2.13流程恢复到调用方的代码

2.13.1__cdecl调用方此时释放参数空间

这些流程可以用图表示,也可以在内存中查看栈的存放顺序如下图

内存中栈存放如下图

如果觉得《c语言函数调用原理底层分析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。