Linux x64 ABI

2017-10-17 Bin

Linux x64和x86相比,主要区别在于参数的传递上:

  • x86使用栈传递全部参数。

    GCC默认将函数参数从右至左push到栈中。由函数调用方负责平衡栈。

  • x64优先使用寄存器传递参数

    对于前6个参数,分别使用rdi, rsi, rdx, rcx, r8, r9传递参数。参数超过6个时使用栈传递额外的参数。同样由调用方平衡栈。

二者都使用eax/rax存储函数返回值。

x64调用时,会在call指令前置空rax,即xor rax, rax

许多情况下,也使用sub esp, Xmov [ebp-X], val的组合向栈中传递参数。