linux下函数参数调用

概览,笔记

x64

整型和指针型参数次保存在寄存器:

  • rdi
  • rsi
  • rdx
  • rcx
  • r8
  • 'r9'

浮点型参数依次保存到:

  • xmm0
  • xmm1

其它从右往左依次入栈。

x86

从右往左依次入栈,即在栈上从低地址向高地址分布。

一般栈上是这样的,从上到下地址增长:

0 1 2 3
...
--------
上层FP  <----FP
--------
返回地址
--------
参数1
--------
参数2
...

如果参数大于四个字节,则占据多个字节,按cpu字节序(endian)入栈

fastcall

使用寄存器,前三个使用寄存器传递参数:

  • eax
  • edx
  • ecx

其它按入栈规则入栈。

C++

除了参数,对象指针也会被传递。