You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:02:35