java的segment_segment 寄存器的真实结构

本文深入探讨了64位模式下x86/x64体系中的Segment Registers,包括Code、Data段寄存器的特性。在64位模式下,Base对于CS, ES, DS和SS无效,但对FS和GS有效;Limit和某些Attribute变得无效。重点讲述了Segment寄存器的结构,如Selector、Attribute、Limit和Base,并强调了CS寄存器的L属性以及Data段寄存器的限制。此外,还讨论了如何在不同模式下更新Segment Register的base以及其limit值。" 31121899,3386641,CentOS 安装Qualcomm Atheros 网卡驱动指南,"['Linux驱动', '网络配置', 'CentOS', '硬件兼容性', '设备驱动']
摘要由CSDN通过智能技术生成

Segment Register 也可以称作 Selector Register,它在整个 x86/x64 体系下实在太重要了。

这里讲解的是 user segment 寄存器,包括:

Code 段寄存器:CS

Data 段寄存器:ES, SS, DS, FS 以及 GS

这些段寄存器由 user segment descriptor 装载进去。

我们很有必要先去了解 segment 寄存器的真实结构:

08086bd0a236074e997180b712956b7f.png

上图是我画的 Segment Registers 内部结构图,这分为 4 个部分:

Selector

Attribute

Limit

Base

图中已经标出灰色部分是processor 内部使用的,仅仅只有 Selector部分可以由用户使用

但是在64 位模式下,它很特别:

Base是 64 位的,但是对于 CS, ES, DS 和 SS 来说 Base 是无效的,而对于 FS 和 GS 来说,它们是有效的,64位的 Base address 可以由用户设定

Attribute 只有少数几个属性位是有效的

Limit 对于所有的 segment registers 来说都是无效的。

注意上面所说的是针对在 64 位模式下。

segment registers 结构体现了 protected mode 下的几大元素:

selector

descriptor

descriptor table

1. 提供基址

Segment registers 的 base 提供基址,无论是 real mode 下还是 protected mode 下,其地址的计算方法都是:base + offset

如果有下面代码:

jmp next

next:

目标代码地址在 CS.base + eip

2. Segment Registers 的 Attribute 部分

Segment Registers 的 Attribute 是描述段的属性,它在装载 segment descriptor 的时候加载进去设置的,它包括:

G 属性:segment

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值