保护模式-段寄存器

目录

思考

逻辑地址、线性地址、物理地址

什么是段

什么是段寄存器

段寄存器的结构

不可见部分的探测

段基址的探测

段限长的探测

访问权限的探测


思考


以下的汇编指令中的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),每个段的大小和属性都

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值