x86 汇编:内存寻址
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 基地址在 rbx,i 在 rcx,编译器可能会生成类似:
mov eax, [rbx + rcx * 4 + 8]
这里 4 是 int 的大小,8 是偏移两个元素。
结构体字段
结构体字段也常表现为固定偏移:
mov eax, [rdi + 12]
这通常表示从对象地址 rdi 往后偏移 12 字节读取字段。
调试建议
如果怀疑数组越界或结构体布局问题,可以同时查看寄存器值、内存地址和类型大小。很多底层 bug 都藏在“偏移算错”里。
评论
...正在读取评论。