liqinghua1653/
共11个网摘 [
1 ] |
访问liqinghua1653的个人空间
liqinghua1653收录,时间:2007-11-2 21:43:47 | 相关网摘,我也收藏
因为经常需要和不同的Calling Convention打交道,前段时间整理了一下它们之间的区别,如下:
清理堆栈参数压栈顺序命名规则 (MSVC )备注
Cdecl调用者 (Caller)从右往左 FuncName因为是调用者清理Stack,因此允许变参 (如printf)
Pascal被调用者 (Callee)从左往右 已不再支持__pascal, __fortran, __syscall
Stdcall被调用者 (Callee)从右往左 _FuncName@N
N表示所有参数大小字节数,如4一般在Windows API和COM中使用,也是.NET和Native代码调用的缺省Calling Convention。
顺便提一下,Windows中API的Calling Convention所使用到的WINAPI宏在PC机上是__stdcall,而在WinCE上则是__cdecl,并非一成不变。
Fastcall (Microsoft)被调用者 (Callee)从右往左 @FuncName@N
N表示参数大小字节数,如4和Stdcall类似,但是会选择两个从左往右数最先可以放在寄存器里面的参数放在ECX和EDX中
Thiscall (Microsoft)被调用者 (Callee)从右往左 编译器会将名字,类名,参数等编码%u523
http://blog.csdn.net/ATField/archive/2007/10/28/1852736.aspx
共11个网摘 [
1 ]