梗概

  • 调用约定(Calling Convention)是规定子过程如何获取参数以及如何返回的方案,其通常与架构、编译器等相关。
  • 具体来说,调用约定一般规定了参数、返回值、返回地址等放置的位置(寄存器、栈或存储器等)如何将调用子过程的准备工作与恢复现场的工作划分到调用者(Caller)与被调用者(Callee)身上

各种调用约定

在计算机技术发展的过程中,出现了各种调用约定,它们有的看起来相似,但在具体编译器的实现上,又有细微不同。所以,这是一件很麻烦的事情。大体来说,有如下规范:

  • cdecl
    • 值得庆幸的是,目前我们 IT 工业的基石,绝大部分是由 C 语言写成。于是自然而然,绝大多数库都遵循 cdecl(或 C)规范。所以我们可以专注于 C 规范来讨论问题
  • syscall
  • optlink
  • pascal
  • register
  • stdcall
  • fastcall
  • thiscall
  • winapi
  • Intel ABI
  • System V 等。详情可参考:X86调用约定

参考

调用约定(Calling Convention)浅析 - 知乎