为何Intel从32位到64位时系统调用寄存器及顺序发生变化?
Linux系统调用的寄存器使用规则(32位 vs 64位)
嘿,刚好我对这个熟得很!你记系统调用顺序的思路太对了——把寄存器传参的规则摸透,确实能让你一眼就认出汇编里的系统调用操作。我来给你把32位和64位的规则拆解得明明白白:
32位Linux系统调用流程
在32位环境下,触发系统调用要严格遵循以下步骤:
- 把系统调用号存入寄存器
eax - 按参数顺序依次放入对应寄存器:
ebx(第一个参数)→ecx(第二个)→edx(第三个)→esi(第四个)→edi(第五个)→ebp(第六个) - 最后执行中断指令
int 0x80来触发内核处理系统调用
64位Linux系统调用流程
64位环境下的寄存器规则做了优化,和32位差异不小:
- 把系统调用号存入寄存器
rax - 按参数顺序依次放入对应寄存器:
rdi(第一个参数)→rsi(第二个)→rdx(第三个)→r10(第四个)→r8(第五个)→r9(第六个) - 最后执行
syscall指令触发系统调用
小补充:不管是32位还是64位,要是系统调用需要的参数超过6个,剩下的参数就得通过栈来传递啦,这个细节也别漏了~
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

