GCC的調用約定
- IA-32
在32位的體系結構中,有3種調用約定,分別是cdecl
,stdcall
,fastcall
,GCC的默認調用約定爲cdecl
。參數從右向左壓棧,調用者負責在調用後清理堆棧,返回值保存在eax寄存器中,非易失寄存器爲ebp
,esp
,ebx
,esi
,edi
。
參考 C Calling Convention
X86上的一些調用慣例需要通過棧來傳遞參數,對於X64來說,多數調用慣例都是通過寄存器來傳遞參數。
- X86-64
x64的調用約定只有一種,遵守system v ABI的規範。但是Linux和windows卻有一些差別。在windows X64中,前4個參數通過rcx
,rdx
,r8
,r9
來傳遞,其餘的參數按照從右向左的順序壓棧。在Linux上,則是前6個參數通過rdi
,rsi
,rdx
,rcx
,r8
,r9
傳遞,其餘的參數按照從右向左的順序壓棧。
更詳細的信息參考另一篇文章 system V ABI