Alb*_*ert 8 x86 assembly operating-system
分段选择器什么时候出现在图片中.英特尔指南中的一行说:
"每个段描述符都有一个关联的段选择器.段选择器提供使用它的软件,其中包含GDT或LDT的索引(其相关段描述符的偏移量),全局/本地标志(确定选择器是否指向GDT或LDT)和访问权限信息."
我没理得.
是否有单独的段选择器寄存器?它是如何计算的?为什么我们需要它.
小智 14
GDT代表全球描述表.
这里重要的是单词table和表Intel表示数组.
作为一个数组的表,它有元素,每个元素称为描述符.当然,每个元素都可以被索引,即它具有唯一索引
的段选择寄存器保存的描述符的索引.段选择器寄存器中的值称为选择器.
然而事情有点详细.
一个索引 不是一个选择.
除了索引之外,段选择器寄存器还包含两件事:
程序员想要用来访问描述符的特权.这称为每个寄存器的RPL(请求权限级别),但CS其中称为CPL(当前权限级别).角色RPL和CPL比赛中使用的段选择寄存器在英特尔手册定义,它是太长,在这里解释.
用于调查的表格.一个表是GDT,另一个是LDT.英特尔手册中的差异和用途也是如此.
所以非正式规则是:
selector = index + table_to_use + privilege
table_to_use + index = descriptor = 有关要使用的内存段的所有信息
当然,+这并不意味着算术加.段选择器寄存器的实际位字段是
15 3 2 0
+--------------------------------------------------+----+--------+
| Index | TI | RPL |
+--------------------------------------------------+----+--------+
TI = Table Indicator: 0 = GDT, 1 = LDT
Run Code Online (Sandbox Code Playgroud)
因此,例如,值05h选择索引为0的描述符(在LDT中使用RPL = 1),这是无效的,因为Intel明确要求不使用描述符0.
第一个可用的描述符可通过选择器 访问,选择器08h作为表格选择GDT与RPL = 0.值08h-0bh全部在GDT中选择索引为1 的描述符,只是使用不同的RPL.
这是术语的完整ASCII艺术
<---- Selector ----> +----- Segment Selector Register
+-------+----+-----+ v
| Index | TI | RPL | = DS
+-------+----+-----+ GDT LDT
| | +---------------------+ +---------------------+
| +------------>| Null Descriptor | | Null Descriptor |
| +---------------------+ +---------------------+
| | Descriptor 1 | | Descriptor 1 |
| +---------------------+ +---------------------+
| | | | |
| ... ... ... ... ... ... ... ...
| | |
| +---------------------+
+------------------->| Descriptor K |
+---------------------+
| |
... ... ... ...
Run Code Online (Sandbox Code Playgroud)
关于如何计算以及为什么需要它
简答:阅读英特尔手册,因为它是完整的参考.
答案很长:我们,用户模式程序员,不计算它.由于段的所有这些都归结为限制程序的特权,因为它是命令而不是我们的操作系统,我们只是使用操作系统给我们的值(通过基本上加载我们的程序)作为GDT和 LDT由操作系统建立,现在它愿意在任何方面与我们合作.
我们需要细分市场,因为在Real模式下有一些细分市场(谷歌可以获得更多信息),因为他们可以避免在没有分页的情况下重新定位聚集隔离(谷歌获取更多信息),并且因为细分现在包含的信息多于简单的基本偏移和限制.其中之一:Descriptor Privilege Level限制用户模式程序的权限.
那么发生的事情是:
每当加载程序时,链接加载器都会使用适当的选择器加载“段寄存器”。
段寄存器(例如CS、DS、SS等)分为两部分:可见部分和隐藏部分。
它是由加载程序加载适当值的可见部分。
该值是 GDT 或 LDT 中的索引,具体取决于选择器的 TI 标志。
处理器自行加载隐藏部分。隐藏部分的信息是线性地址空间中的段基地址、段界限、访问信息。
| 归档时间: |
|
| 查看次数: |
7503 次 |
| 最近记录: |