1、stdcall
通常用于Win32 API中,函数采用从右至左(RTL)的压栈方式,在退出时由本身清空堆栈。

2、fastcall
通过寄存器来传送参数。实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈。

3、cdecl
C语言的调用约定,按从右至左(RTL)的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数(如printf)只能使用该调用约定)。

4、thiscall
仅应用于“C++”成员函数。this指针存放于CX/ECX寄存器中,参数从右到左压。

5、naked call
当采用以上的调用约定时,如必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容,但是naked call不会产生这样的代码。

Categories: 笔记

0 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注