函数堆栈调用过程及调用约定简介

一、函数堆栈调用开栈过程:

第一步:自右向左 压入实参 —— 形参的初始化;

第二步:压入下一行指令地址;

第三步:压入调用方函数的栈底地址;

第四步:调转到被调用方函数的栈帧位置;

第五步:开辟被调用函数运行需要的栈空间。

堆栈调用的释放过程就是开展过程的逆过程。

 

二、调用约定

1、约定的形式:

_cdecl:C标准调用约定

_stdcal:Windows下的标准调用约定

_fastcall:快速调用约定

_thiscall:类成员方法的调用约定

2、约定内容:

(1)函数的额符号生成方式

(2)实参的入栈方式

(3)形参的开辟和清理

        _cdecl 约定中,调用方开辟形参的存放空间,调用方负责清理空间;

        _stdcall 约定中,调用方开辟形参的存放空间,被调用方负责清理空间;

        _fastcall 约定中,调用方开辟形参的存放空间,被调用方负责清理空间;

 

三、函数返回值的带回方式

返回值的带回是通过返回值的类型大小来确定它的带回方式的。

如果返回值类型大小  < 4 字节,则存放在  eax 寄存器中被带回;

如果返回值类型大小  >4 字节  && < = 8 字节,则存放在 eax  和  edx  两个寄存器中被带回;

如果返回值类型大小  >8 字节,则重新开辟一块空间,将需要带回的内容存放在新开辟的内存中,然后将该空间的地址返回给函数。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值