函数调用规范

函数调用规范是指进行一次函数调用时所采用的传递参数的方法,返回值的处理以及调用堆栈的清理.
Microsoftc/c++语言中采用了五中调用规范,分别是_cdecl,_stdcall,_fastcall,thiscall和nake.
每一种调用都是利用eax返回,如果函数返回值是64位的,则利用edx:eax返回.

 

各种调用规范的参数传递方法和调用堆栈清理如下:

_cdecl  堆栈清理者(调用者)  参数传递顺序(从右至左)

_stdcall  堆栈清理者(被调用者)  参数传递顺序(从右至左)

_fastcall  堆栈清理者(被调用者)  参数传递顺序(从右至左,前两个参数由ecx,edx传递)
thiscall  堆栈清理者(被调用者或调用者)  参数传递顺序(从右至左)
  

各种调用规范的用途如下:
_cdcel由于是调用者清理堆栈,所以可用来处理可变参数.
_stdcall是在windows程序设计中出现最多的调用规则,所有的不可变参数的API调用都使用这个规则.
_fastcall在windows内核设计中被广泛使用,由于两个参数由寄存器直接传递,采用这种规则的函数效率很高.
thiscall是c++成员函数的默认调用规范.编译期间,这种调用会根据参数是否支持可变参数表来决定采用什么方式清理堆栈.
如果成员函数不支持可变参数,那么它就是用参数入堆栈,ecx保存this指针的方式进行调用,如果成员函数支持可变参数,那么它的调用和_cdecl类似,唯一不同的是将this指针最后压入堆栈中进行传递.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值