有关寄存器

L1rics 发布于 2025-08-08 153 次阅读


1. 通用寄存器对照表(x86_64 ↔ x86)

64 位寄存器32 位寄存器16 位寄存器8 位高位8 位低位常见作用
RAXEAXAXAHAL累加器,常用于返回值
RBXEBXBXBHBL基址寄存器
RCXECXCXCHCL计数寄存器(循环、rep 前缀的计数器)
RDXEDXDXDHDL数据寄存器(I/O、除法余数、syscall 参数)
RSIESISISIL源地址寄存器(字符串/内存操作源指针)
RDIEDIDIDIL目的地址寄存器(字符串/内存操作目标指针)
RBPEBPBPBPL基址指针(栈帧基址,调试、局部变量访问)
RSPESPSPSPL栈指针(总是指向栈顶)
R8R8WR8B额外参数寄存器(x86_64 新增)
R9R9WR9B同上
R10R10WR10B任意用途(内核调用时经常传参)
R11R11WR11B任意用途
R12R12WR12B任意用途
R13R13WR13B任意用途
R14R14WR14B任意用途
R15R15WR15B任意用途

2. 常见调用约定下的作用

System V AMD64 ABI(Linux 64 位常用)

函数参数位置寄存器
第 1 个参数RDI
第 2 个参数RSI
第 3 个参数RDX
第 4 个参数RCX
第 5 个参数R8
第 6 个参数R9
返回值RAX
系统调用号RAX
系统调用参数RDI, RSI, RDX, R10, R8, R9

cdecl(32 位 Linux 常用)

  • 所有参数都从栈传递(右到左压栈)
  • 返回值放在 EAX
  • 调用者负责平衡栈

寄存器常用习惯总结

  • RAX/EAX:结果/累加器(算数、返回值、syscall 号)
  • RBX/EBX:无固定用途(某些特殊代码中当指针或索引)
  • RCX/ECX:计数器(循环、rep 前缀)
  • RDX/EDX:数据寄存器(乘除法、I/O、高位扩展)
  • RSP/ESP:栈指针(push/pop 自动修改)
  • RBP/EBP:栈基址(函数帧)
  • RSI/ESI:源指针
  • RDI/EDI:目的指针
此作者没有提供个人介绍。
最后更新于 2025-08-08