The 64 bit x86 C Calling Convention
重新看了一下x86-64 下面的c call convention. 这个可能对于debug core会有点帮助,看看参数是放在那些寄存器里面的。
caller saved reg有下面这些:
- rdi, rsi, rdx, rcx, r8, r9 里面保存参数(按顺序)
- r10, r11 如果使用也需要保存
- 返回值放在rax上
- 多余的参数放在stack里面,最后一个参数先压栈
callee saved reg有下面这些:
- rbx, rbp, r12, r13, r14, r15 如果使用需要保存
- push rbp; mov rbp, rsp; sub 12 rsp ; … pop rbp
这些都是基本的寄存器,对于xmm0(x87 fp好像和这个重合), ymm0这些扩展寄存器,就不太确定是怎么个约定了。