【问题标题】:How to properly set privileges in page directory entries?如何在页面目录条目中正确设置权限?
【发布时间】:2020-01-28 12:05:04
【问题描述】:

首先:这个问题是关于 IA-32 (x86) 架构的。

我有一个关于旧式(非 PSE、非 PAE)分页的问题。在遗留分页中,我们有一个包含 1024 个条目的页面目录,每个条目都指向一个页表。每个页表包含 1024 个条目(这些是页),每个条目指向一个 4096 字节对齐的物理地址。

同时,每个单独的页目录条目和页表条目都有一些标志,并且它们都有一个'U'标志(位#2):如果设置了这个标志,那么两个用户都可以访问该页面( ring3)和主管(ring0);但是,如果未设置此标志,则只有主管(ring0)可以访问它。此标志通常称为“用户/主管位”。

问题:如果我想在同一个页表中同时拥有 ring0 和 ring3 页,我应该怎么做?我可以在页表中设置相应权限的条目,但是对应的页目录条目应该指定什么权限呢?

例如:我设置了第一个页表(虚拟地址范围:0x00000000 - 0x003FFFFF)来映射物理地址范围 0x00000000 - 0x003FFFFF(这包括 4 兆字节)。第一个兆字节(0x00000000 - 0x000FFFFF)应该只能由主管(ring0)访问,因此,“用户/主管位”被清除。用户 (ring3) 和主管 (ring0) 都应该可以访问以下三兆字节 (0x00100000 - 0x003FFFFF),因此设置了“用户/主管位”。

此页表由第一个页目录条目指向。但是该页面目录条目的“用户/主管位”应该被清除(仅主管)或设置(用户和主管)?有什么区别?

【问题讨论】:

    标签: memory x86 intel paging osdev


    【解决方案1】:

    CPU 将在页目录条目 (PDE) 或页表条目 (PTE) 中使用最严格的特权。如果一个 PDE 具有主管权限,那么无论单个 PTE 使用什么,它下面的所有页表都将具有主管权限。如果 PDE 具有 User 权限级别,则 PTE 的保护级别决定了最终的权限级别。

    此行为在Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A 中定义。

    4.11.4 结合两级页表保护

    对于任何一个页面,其页面目录项的保护属性(第一级 页表)可能与其页表条目(二级页表)不同。 处理器在其页面目录和页面目录中检查页面的保护 页表条目。表 4-3 显示了清除 WP 标志时可能的保护属性组合所提供的保护。

    表 4-3 显示为:

    问题答案:如果您想在特定 PDE 下混合具有用户和主管权限的页面,则将 PDE 设置为用户权限,并相应地设置 PTE(用户或主管)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-20
      • 2019-05-11
      • 2010-09-12
      • 2014-05-28
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多