目录
思考
以下的汇编指令中的ds:[0x12345678]表示什么?
mov eax, dword ptr ds:[0x12345678]
逻辑地址、线性地址、物理地址
在x86架构中,逻辑地址、线性地址和物理地址之间存在着一定的关系,这些地址的转换关系如下:
- 逻辑地址(Logical Address):逻辑地址是由程序生成的地址,包括段选择符(Seg.Selector)和偏移量(Offset)两部分。段选择符(Seg.Selector)用于指定段描述符(Seg.Descriptor)在全局描述符表(GDT-Global Descriptor Table)或者局部描述符表(LDT-Local Descriptor Table)中的索引,偏移量(Offset)用于指定段内的偏移地址。由于逻辑地址是相对于段的,所以需要通过段基址和偏移量进行相加才能得到线性地址。如Intel白皮书所示:

- 线性地址(Linear Address):线性地址是在x86架构中引入的概念,它是指逻辑地址经过分段机制转换后得到的地址。线性地址可以看作是逻辑地址到物理地址转换的中间结果,它是相对于整个虚拟地址空间的。
- 物理地址(Physical Address):物理地址是指内存中实际的地址,是CPU通过地址总线发送给内存控制器访问内存的地址。线性地址通过页目录表、页表和页内偏移量进行转换得到物理地址,它指向实际的物理存储单元。需要注意的是,在x86-64架构中,由于采用了平坦模型和64位的地址空间,物理地址和线性地址是一一对应的,因此不需要进行分页转换。
ds:[0x12345678]中的ds就是一个段寄存器,它存储了一个段选择符。0x12345678则是一个偏移量,它指定了该段内的偏移地址。
什么是段
在x86架构中,内存被划分为多个段(Segment),每个段的大小和属性都

最低0.47元/天 解锁文章





