GCC的调用约定

GCC的调用约定

  • IA-32
    在32位的体系结构中,有3种调用约定,分别是cdeclstdcallfastcall,GCC的默认调用约定为cdecl。参数从右向左压栈,调用者负责在调用后清理堆栈,返回值保存在eax寄存器中,非易失寄存器为ebpespebxesiedi
    参考 C Calling Convention

X86上的一些调用惯例需要通过栈来传递参数,对于X64来说,多数调用惯例都是通过寄存器来传递参数。

  • X86-64
    x64的调用约定只有一种,遵守system v ABI的规范。但是Linux和windows却有一些差别。在windows X64中,前4个参数通过rcxrdxr8r9来传递,其余的参数按照从右向左的顺序压栈。在Linux上,则是前6个参数通过rdirsirdxrcxr8r9传递,其余的参数按照从右向左的顺序压栈。
    更详细的信息参考另一篇文章 system V ABI

函数属性(GCC手册)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章