C++函数调用约定有4种:
1._cdecl C标准调用约定,也是默认调用约定
2._stdcall Windows下的标准调用约定
3._fastcall 快速调用约定
4._thiscall 类成员方法的调用约定
_cdecl调用约定生成的函数符号:?函数名@@YAHHH@Z
YA代表_cdecl函数约定,YG代表_stdcall函数约定,YI代表_fastcall函数约定。
函数调用约定后的第一个参数代表函数返回值类型,第二个参数代表第一个形参类型,第三个参数代表第二个形参类型。其中H代表int,_N代表bool,N代表double。
最后的@Z代表有形参。
函数调用约定约定了什么?
1.函数符号的生成;
2.实参的入栈顺序(以上四种调用约定均是从右向左入栈);
3.形参的开辟和清理方式
_cdecl 调用方开辟内存,调用方清理
_stdcall 调用方开辟内存,被调用方清理
_fastcall 最多使用2个寄存器带入实参,第3个参数起,调用方开辟内存,被调用方清理
函数返回值的返回方式
1.返回值如果>0个字节并且<=4个字节则由eax寄存器带回;
2.返回值如果>4个字节并且<=8个字节则由2个寄存器eax、edx带回;
3.返回值如果>8个字节则由临时量带回。
寄存器:eax、ebx、ecx、edx
ebp:栈底指针寄存器
esp:栈顶指针寄存器
PC:下一行指令寄存器