是否有工具可以显示调用约定是 _cdecl 还是 _stdcall 还是其他?
问问题
416 次
1 回答
1
调用约定是每个函数 - 而不是 PE 文件。
库函数。至少MS提供的都是_stdcall
. 其他所有内容都分布在其他调用约定中,其中大多数是_cdecl
.
你可以在这里阅读更多。
简短版本:
cdecl
函数不会从堆栈中清除它的参数,允许可变大小的参数。很好的例子是printf()
可以使用不同数量的参数。stdcall
函数本身从堆栈中清除参数。因此,可变大小的参数是不可能的。
编辑:添加示例
cdecl
来自链接的示例:
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing, 3 arguments take 12 bytes of space (on 32bit)
所以在function_name
返回后,调用者从堆栈中清除参数。
于 2010-09-19T21:06:15.223 回答