首页 > 编程语言 > 详细

vc++的调用约定

时间:2020-03-19 20:02:37      阅读:56      评论:0      收藏:0      [点我收藏+]

vc++的调用约定

32-bit x86 调用约定

本文只讨论微软编译器用到的调用约定,不讨论windows以外的操作系统,也不讨论vc++以外的编译器

说到调用约定,大家应该知道c++成员函数的第一个参数是this指针。

开始

32位的x86 的调用约定都会保存EDI, ESI, EBP, EBX这几个寄存器, 返回值使用EDX:EAX对

C (__cdecl)

参数入栈顺序:从右到左

参数退栈:调用方

函数名修饰:名字后加个下划线

__stdcall

Win32在用的调用约定,变参函数(variadic functions)除外(变参函数必须使用__cdecl)。

参数入栈顺序:从右到左

参数退栈:被调用方

函数名修饰:名字前加下划线,后加@,加参数所占字节数的大小(the number of bytes of parameters taken)

__fastcall

前两个参数送到ECX,EDX,剩下的参数入栈同__stdcall

参数入栈顺序:从右到左

参数退栈:被调用方

函数名修饰:名字前后加@,后面再加参数所占字节数的大小(the number of bytes of parameters taken)

thiscall

第一个参数(this)送到ECX,剩下的参数入栈同__stdcall

参数入栈顺序:从右到左

参数退栈:被调用方

函数名修饰:复杂的c++的名字修饰规则,包含每个参数的类型,因为支持overloading,所以必须这样

最后

调用约定是调用方与被调用方之间的一个合约,大家约定好了如何保存(与恢复)寄存器(与堆栈),不守约定程序就会崩溃

vc++的调用约定

原文:https://www.cnblogs.com/ConfuciusPei/p/12526732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!