函数调用约定,决定在函数调用过程中参数的传递方式、栈平衡由调用者还是被调用者执行、返回值如何传递。
三种比较基本的函数调用约定:
- cdelc (C调用约定)
- stdcall (标准调用约定)
- fastcall (快速调用约定)
cdelc
参数通过堆栈传递,参数从右至左依次入栈;
由调用者负责执行栈平衡;
返回值一般存放于eax中;
备注:cdelc是C语言默认的函数调用约定;函数名前面加下划线_;
stdcall
参数通过堆栈传递,参数从右至左依次入栈;
由被调用者负责执行栈平衡(ret n指令),意味着更好的兼容性;
返回值一般存放于eax中;
备注:C函数前加关键字stdcall使函数调用约定变更;WINAPI 是 _stdcall的别称,意味着所有的Windows API函数都是stdcall调用约定;函数名前加下划线,函数名后加@。