__cdecl调用约定如何返回结构?

时间:2017-07-21 15:31:50

标签: assembly x86 nasm

我想调用一个返回struct的函数,该函数具有__cdecl调用约定。

__cdecl调用约定如何返回struct

1 个答案:

答案 0 :(得分:2)

这取决于。

没有统一的方法。

简单函数返回,如int s在寄存器中返回,但没有一个调用约定,__cdecl__stdcall等描述了struct的准确性。返回。

  • 在这些提到的寄存器中,有些返回适合一个(EAX,RAX)或两个寄存器(EDX:EAX或RDX:RAX)的简单结构。
  • 其他通过引用返回structs,即函数结果被编译为void函数,为这样的struct提供额外的指针参数。
  • 其他人应用这些策略的混合。

我遇到了很大的问题 (返回struct s的DLL函数)。事实上,不同的编译器使用不同的策略来返回struct甚至在同一平台上并使用相同的调用约定,这让我发出警告:永远不应该返回{{1例如,DLL函数。

更多信息: