x86 汇编入门:寄存器与机器视角
汇编语言让我们从机器视角观察程序。
通用寄存器
在 x86-64 中常见寄存器包括:
raxrbxrcxrdxrsirdirsprbp
mov
mov 用来移动数据:
mov rax, 1
mov rbx, rax
它不是高级语言里的对象赋值,而是寄存器或内存之间的数据复制。
理解寄存器,是阅读反汇编和调试底层问题的第一步。
图片来源:Wikimedia Commons,Intel 8086 处理器照片。x86 这个名字最早就来自 8086/80186/80286/80386 这一系列。
为什么先看寄存器
高级语言里的变量最终要落到寄存器或内存中。寄存器数量少、速度快,是 CPU 执行指令时最直接操作的数据位置。
阅读反汇编时,我通常先找这些信息:
- 函数参数在哪些寄存器里。
- 返回值是否放在
rax。 - 哪些寄存器在函数内被保存和恢复。
- 是否频繁访问栈或内存。
32 位和 64 位名字
rax 是 64 位寄存器,eax 是它的低 32 位,ax 是低 16 位,al 是低 8 位。看到这些名字时,不要以为是完全不同的寄存器,它们是同一物理寄存器的不同视图。
评论
...正在读取评论。