gpt4 book ai didi

assembly - IA-32 中的段选择器

转载 作者:行者123 更新时间:2023-12-04 05:25:43 25 4
gpt4 key购买 nike

段选择器什么时候出现。英特尔指南中的一行说:

"Each segment descriptor has an associated segment selector. A segment selector provides the software that uses it with an index into the GDT or LDT (the offset of its associated segment descriptor), a global/local flag (determines whether the selector points to the GDT or the LDT), and access rights information."



我不太明白。

是否有单独的段选择器寄存器?
它是如何计算的?
为什么我们需要它。?

最佳答案

GDT 代表全局描述符表。
这里重要的是这个词。表并通过表英特尔表示阵列。

作为一个表,一个数组,它有元素,每个元素被称为 描述符 .当然每个元素都可以被索引,即它有一个唯一的索引

段选择器寄存器保存描述符的索引。进入段选择器寄存器的值称为选择器。

然而,事情要复杂一些。
指数不是 一个选择器。

除了索引,一个段选择器寄存器还有两件事:

  • 程序员要用于访问描述符的特权。这叫做 RPL (请求特权级别)适用于每个寄存器,但 CS其中称为 CPL (当前特权级别)。 RPL 和 CPL 在使用段选择器寄存器中的作用在 Intel 手册中定义,这里解释太长。
  • 用于查看的表。一张表是 GDT,另一张表是 LDT。再次差异和用途在英特尔手册中。

  • 所以非正式规则是:

    选择器 = 索引 + table_to_use + 权限
    table_to_use + 索引 = 描述符 = 有关要使用的内存段的所有信息

    当然,在哪里 +根本不意味着算术加。段选择器寄存器的实际位域是
    15                                                 3    2        0
    +--------------------------------------------------+----+--------+
    | Index | TI | RPL |
    +--------------------------------------------------+----+--------+

    TI = Table Indicator: 0 = GDT, 1 = LDT

    因此,例如值 05h选择索引为 0 的描述符(在 LDT 中使用 RPL=1),这是无效的,因为英特尔明确要求不使用描述符 0。
    第一个可用的描述符可以通过选择器 08h 访问选择 RPL=0 的 GDT 作为表。值 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 |
    +---------------------+
    | |
    ... ... ... ...

    关于它是如何计算的以及我们为什么需要它

    简短回答:阅读英特尔手册,因为它是完整的引用。

    长答案:我们,用户模式程序员,不计算它。由于所有这些与段有关的事情归结为限制程序的特权,并且由于是操作系统而不是我们进行命令,我们只需使用操作系统给我们的值(基本上通过加载我们的程序)作为 GDT 和LDT 是由 OS 设置的,现在它愿意在任何方面与我们合作。

    我们需要段,因为在实模式下有段(谷歌了解更多信息),因为它们可以避免在没有分页的情况下重新定位收集隔离(谷歌了解更多信息),并且因为段现在包含更多信息,而不仅仅是基偏移和限制.其中之一: 描述符权限级别 这限制了用户模式程序的权限。

    关于assembly - IA-32 中的段选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113310/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com