12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 319|回复: 0

保护模式笔记四 段描述符结构

[复制链接]

312

主题

312

帖子

634

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
634
发表于 2021-5-8 00:16:49 | 显示全部楼层 |阅读模式
前言

所有保护模式索引链接:保护模式条记一 保护模式介绍
先前了解了段描述符和段选择子之间的对应关系,继续深入学习段描述符的结构
段描述符结构


数据位31-242322212019-161514-131211-87-0含义BaseGD/B0AVLSeg.LimitPDPLSTypeBase解释基地址粒度默认操作大小固定为0用于系统软件利用段大小限制有效位特权等级描述符类型段类型基地址数据位31-1615-0含义Base AdressSegment Limit解释基地址段大小限制段描述符与段寄存器的对应关系

段寄存器组成BaseLimitAttribute数据宽度32位32位16位描述基地址(当前段的起始地址)大小限制(当前段的整个长度)属性(当前段是否可读可写可执行)对应段描述符段描述符中的3段base段描述符中的2段limit和G位共同决定对应位高4字节:24~31 0~7 ,低4字节:16~31高4字节:16~19,低4字节:0~15高4字节:8~23P位

当段描述符加载至段寄存器时,CPU首先要做的事就是检查段描述符的P位
P==0P==1含义该段描述符无效该段描述符有效也就是说:P位决定了该段描述符是否有效
G位

CPU判断完段描述符P位有效后,还需要判断地址是否超出Limit
但会发现这里的Limit分为了两段,但两段的总长度也只有4+16=20位,和段寄存器中的Limit的32位不匹配
这里的Limit的最大表示范围是:0~2的20次方-1=0~0xFFFFF
而段寄存器中的Limit的最大表示范围是:0~2的32次方-1=0~0xFFFFFFFF
很显然如今的Limit无法表示段寄存器中的Limit了,为了办理这个题目,引入了G位:粒度(用来表示Limit的单元)
G==0G==1含义limit以字节为单元limit以4096=2的12次方 字节为单元表示范围0~0xFFFFF0xFFF~0xFFFFFFFF也就是说:G位决定了limit的单元
S位

S位用来标记当前描述符的类型
S==0S==1含义系统段描述符代码段或数据段描述符段描述符可以分为系统描述符、代码段描述符和数据段描述符
根据S位的差异(描述符类型的差异)对应的Type域也差异
也就是说:S位决定了Type域的含义
Type域

Type占据了第11位到第8位,共4位
S位为1时

当S==1时,该段描述符为代码段描述符或者数据段描述符

十进制111098描述符类型描述E(是否向下扩展)W(是否可写)A(是否可访问)00000数据段描述符只读10001数据段描述符只读,可访问20010数据段描述符可读可写30011数据段描述符可读可写可访问40100数据段描述符只读,向下扩展50101数据段描述符只读,向下扩展,可访问60110数据段描述符可读可写,向下扩展70111数据段描述符可读可写,向下扩展,可访问C(是否可以从较低的特权级别调用)R(是否可读)A(是否可访问)81000代码段描述符只可执行91001代码段描述符只可执行,可访问101010代码段描述符可执行可读111011代码段描述符可执行可读,可访问121100代码段描述符只可执行,可从较低特权级别调用131101代码段描述符只可执行,可从较低特权级别调用,可访问141110代码段描述符可执行可读,可从较低特权级别调用151111代码段描述符可执行可读,可从较低特权级别调用,可访问主要阐明一下向下扩展和非向下扩展(向上扩展)
向上扩展就是:该段描述符所描述的地址的有效范围是从Base开始到Base+Limit结束
为下图中的红色部分:

与之相反,向下扩展则是:该段描述符所描述的地址的有效范围除了 从Base开始到Base+Limit结束 之外的部分
为下图中的红色部分

S位为0时

当S==0时,该段描述符为系统描述符
系统描述符有分为以下类型:

十进制111098描述00000保存1000116位 任务状态段TSS(可用)20010LDT3001116位 任务状态段TSS(繁忙)4010016位 调用门50101任务们6011016位 停止门7011116位 陷阱门81000保存9100132位 任务状态段TSS(可用)101010保存11101132位 任务状态段TSS(繁忙)12110032位 调用门131101保存14111032位 停止门15111132位 陷阱门关于系统描述符中的TSS、调用门、停止门、陷阱门 留作之后的条记,这里不再展开
Type域决定了当前段的属性
D/B位

D/B位分别作用于3种环境:

  • 对CS段的影响
  • 对SS段的影响(SS段也属于数据段)
  • 对向下扩展的数据段的影响
D/B == 0D/B == 1CS段采用16位寻址方式采用32位寻址方式SS段利用16位堆栈指针寄存器SP利用32位堆栈指针寄存器ESP向下扩展的数据段段上限为64KB段上限为4GB主要阐明一下对 向下扩展的数据段的影响
D/B位为1时


D/B位为0时


DPL

DPL=Descriptor privilege level(描述符特权等级)为:访问这个描述符所需的特权级别(环ring)
关于段的权限检查,留作之后的条记,这里不再展开
根据结构分析段描述符

大致了解了段描述符的结构后,就可以通过结构来分析一个段描述符了
给出的示例段描述符为:00cffb00`0000ffff
先转换成二进制:0000 0000 1100 1111 1111 1011 0000 0000 ` 0000 0000 0000 0000 1111 1111 1111 1111
按照对应的格式填入:
数据位31-242322212019-161514-131211-87-0含义BaseGD/B0AVLSeg.LimitPDPLSTypeBase解释基地址粒度默认操作大小固定为0用于系统软件利用段大小限制有效位特权等级描述符类型段类型基地址数值00000000110011111111101100000000数据位31-1615-0含义Base AdressSegment Limit解释基地址段大小限制数值00000000000000001111111111111111P位

此时P位为1,表明当前的段描述符有效
G位

此时的G位为1,表明此时limit以4096字节为单元
Limit

此时的Limit为0xFFFFF,但其单元为4096字节,于是Limit等于0xFFFFF FFF 字节
S位

此时的S位为1,表明该段描述符为代码段描述符或者数据段描述符
Type域

此时的Type域为1011,表明该段描述符为代码段描述符,且可执行可读,可访问
D/B位

此时的D/B位为1,表明此时采用32位寻址方式
DPL

此时的DPL为11,表明访问这个描述符所需的特权级别为ring3(应用层)
阐明

此篇条记大体介绍了段描述符的结构,以及怎样通过结构来解析一个段描述符的含义
目前还剩下段的权限检查和系统描述符没有具体阐明,留作之后的条记( ̄( ̄ )

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-24 17:55 , Processed in 0.140625 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表