x86 汇编:内存寻址

1 min read [x86 汇编语言] post #x86#assembly#memory

x86 支持灵活的内存寻址形式。

mov eax, [rbx + rcx * 4 + 8]

可以理解为:

base + index * scale + displacement

数组访问

如果 rbx 是数组首地址,rcx 是下标,元素大小是 4 字节,那么 [rbx + rcx * 4] 就是访问第 rcx 个元素。

注意

汇编不会帮你检查越界。地址算错了,程序可能崩溃,也可能悄悄污染数据。

寻址公式很重要

x86 的寻址模式非常适合表达数组和结构体访问。比如 C++ 代码:

int x = arr[i + 2];

如果 arr 基地址在 rbxircx,编译器可能会生成类似:

mov eax, [rbx + rcx * 4 + 8]

这里 4int 的大小,8 是偏移两个元素。

结构体字段

结构体字段也常表现为固定偏移:

mov eax, [rdi + 12]

这通常表示从对象地址 rdi 往后偏移 12 字节读取字段。

调试建议

如果怀疑数组越界或结构体布局问题,可以同时查看寄存器值、内存地址和类型大小。很多底层 bug 都藏在“偏移算错”里。

评论

...

正在读取评论。