CPU寄存器¶
x86¶
$eip:指令指针寄存器,指向下一条将要执行的指令地址。$esp:栈指针寄存器,指向当前栈顶位置。$ebp:基址指针寄存器,通常用于指向当前栈帧的基址。$eax、$ebx、$ecx、$edx:通用寄存器,用于存储数据和中间结果。$esi、$edi:源索引和目的索引寄存器,常用于字符串和数组操作。
调用约定¶
这很复杂,请看X86调用约定 — Wikipedia-zh。
x86_64¶
$rip:指令指针寄存器,指向下一条将要执行的指令地址。$rsp:栈指针寄存器,指向当前栈顶位置。$rbp:基址指针寄存器,通常用于指向当前栈帧的基址。$rax、$rbx、$rcx、$rdx:通用寄存器,用于存储数据和中间结果。$rsi、$rdi:源索引和目的索引寄存器,常用于字符串和数组操作。$r8至$r15:额外的通用寄存器,用于存储数据和中间结果。
调用约定¶
传参数时,x86_64架构遵循以下约定:
微软x86-64调用约定¶
- 前4个整型参数依次存放在寄存器
rcx、rdx、r8、r9中。 - 之后的参数依次存放在栈上。
System V AMD64 ABI¶
- 前6个整型参数依次存放在寄存器
rdi、rsi、rdx、rcx、r8、r9中。 - 之后的参数依次存放在栈上。