x64 内存指针和寻址模式

逆向工程 拆卸 调试 风袋
2021-07-07 12:51:20

我正在研究 Windows 反汇编培训指南中的示例。在练习中rax 设置为一个字节 ptr,然后rbx设置为一个字 ptr我注意到在rcx 到双字 ptr之前跳过了下一个内存字节为什么会跳过一个字节的内存?是否有一些对齐要求?

寻址方式

1个回答

对齐数据的主要原因是为了性能(某些架构会在未对齐的数据上出错,但由于您使用 windbg 标记了它,我们将假设 amd/intel x64 + windows)。

引用 AMD64 架构程序员手册第 1 卷:

AMD64 架构对访问内存中的数据没有强加数据对齐要求。然而,根据未对齐操作数相对于数据总线宽度的位置以及硬件实现的其他方面(例如存储到加载转发机制),未对齐的内存访问可能需要比对齐的更多的总线周期使用权。为了获得最佳性能,请避免未对齐的内存访问。

理想情况下,字大小的数据(通过 rbx 指向)将是 2 字节对齐的,但如上所述,这不是必需的。