0

是否有工具可以显示调用约定是 _cdecl 还是 _stdcall 还是其他?

4

1 回答 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 回答