1

映射 4 KB 页位的页表条目的格式

映射 4 KB 页位的 EPT 页表条目的格式

它似乎EPT.bit2EPT.bit10用于确定在主管模式\用户模式下是否允许取指。

但是我怎么知道 IPA 是主管模式线性地址还是用户模式线性地址?一点U/S一点page table

如果我的理解是正确的,那就意味着我们必须结合page tableEPT判断是否允许取指,对吗?

Intel Manual Volume 3C, Chapter 27, 2.3.2 EPT Violations中,手册描述了几种不允许提取的情况。我只关心什么时候的情况VM-execution control = 1


  • 访问是取指令,EPT 分页结构防止对任何被提取字节的执行访问。这是否发生取决于“基于模式的 EPT 执行控制”的设置VM-execution control

    • 如果控制为 0,如果用于转换字节的客户物理地址的任何 EPT 分页结构条目中的第 2 位(执行访问)被清除,则阻止从字节中提取指令。
    • 如果control is 1,则在以下任一情况下阻止从字节中提取指令:
      • 在用于转换字节的客户物理地址的任何 EPT 分页结构条目中,分页映射linear address of the byte as a supervisor-mode address和(对主管模式线性地址的执行访问)都是明确的。bit 2(EPT.bit2)

        linear address as a supervisor-mode address如果在U/S flag(of page table)控制线性地址转换的至少一个分页结构条目中(位 2)为 0,则分页映射 a 。

      • 在用于转换字节的客户物理地址的任何 EPT 分页结构条目中,分页映射linear address of the byte as a user-mode address和(用户模式线性地址的执行访问)都是明确的。bit 10 (EPT.bit10)

        linear address as a user-mode address如果在U/S flag(of page table)控制线性地址转换的所有分页结构条目中 为 1,则分页映射 a 。如果分页被禁用(CR0.PG = 0),每个线性地址都是用户模式地址。


我如何判断一个地址是supervisor-mode address还是user-mode address这里?通过地址的高位(0xffff ...是主管模式地址,0x0000 ...是用户模式地址)?

就和而言Page-Table Entry,我们可以这样说:EPT-entryEPT Violations

  1. if page table's U/S = 0in all levels, then EPT.bit2 = 1in all levels, 提取是允许的。
  2. if page table's U/S = 1in all levels, then EPT.bit10 = 1in all levels, 提取是允许的。
  3. 其他情况下不允许
4

1 回答 1

2

使用设置为管理员模式的高位地址是一种惯例,但它不会影响有关如何完成地址转换或保护的任何事情。CPL(CS 寄存器的位 1:0)控制访问是管理员模式还是用户模式。如果 CPL < 3,访问是主管模式访问;如果 CPL = 3,则访问是用户模式访问。

如果“EPT 的基于模式的执行控制”为 1:

  1. 如果分页被禁用或所有页表级别中的 U/S = 1,并且所有 EPT 级别中的 EPT 位 10 = 1,则允许取指。
  2. 如果 CPL < 3,在任何页表级别中 U/S = 0,并且在所有 EPT 级别中 EPT 位 2 = 1,则允许取指。

如果“基于模式的 EPT 执行控制”为 0:

  1. 如果分页被禁用或 CPL < 3 或所有页表级别中的 U/S = 1,并且所有 EPT 级别中的 EPT 位 2 = 1,则允许取指。

此外,如果 CR4.PAE 为 1,则所有页表级别中的第 63 位 (XD) 必须为 0。

于 2021-07-01T19:36:36.610 回答