问题描述
Format of a Page-Table Entry that Maps a 4-KByte Page Bit
Format of an EPT Page-Table Entry that Maps a 4-KByte Page Bit
看来 EPT.bit2
和 EPT.bit10
是用来判断是否取指令的
在主管模式\用户模式下允许与否。
但是我怎么知道 IPA 是管理模式线性地址还是用户模式线性地址? U/S
中的 page table
位?
如果我的理解是正确的,那就意味着我们必须结合page table
和EPT
来判断是否允许取指令,对吗?
在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
,则在以下任一情况下会阻止从字节中获取指令:-
分页映射
linear address of the byte as a supervisor-mode address
和bit 2(EPT.bit2)
(管理模式线性地址的执行访问)在用于转换访客物理地址的任何 EPT 分页结构条目中都很清楚字节。如果
linear address as a supervisor-mode address
(位 2)在控制线性地址转换的至少一个分页结构条目中为 0,分页映射U/S flag(of page table)
。 -
分页映射
linear address of the byte as a user-mode address
和bit 10 (EPT.bit10)
(用户模式线性地址的执行访问)在用于转换访客物理地址的任何 EPT 分页结构条目中都很清楚字节。如果控制线性地址转换的所有分页结构条目中的
linear address as a user-mode address
为 1,则分页映射U/S flag(of page table)
。如果禁用分页(CR0.PG = 0),则每个线性地址都是用户模式地址。
-
如何判断此处的地址是 supervisor-mode address
还是 user-mode address
?通过地址的高位(0xffff...是管理模式地址,0x0000...是用户模式地址)?
对于Page-Table Entry
、EPT-entry
和EPT Violations
,我们可以这样说吗:
- 如果
page table
的U/S = 0
在all levels
中,则EPT.bit2 = 1
在all levels
中,则允许提取。 - 如果
page table
在U/S = 1
中的all levels
,则EPT.bit10 = 1
在all levels
中, 允许提取。 - 其他情况下不允许
解决方法
使用为管理模式设置高位的地址是一种惯例,但它不会影响地址转换或保护的完成方式。 CPL(CS 寄存器的位 1:0)控制访问是管理员模式还是用户模式。 如果 CPL
如果“EPT基于模式的执行控制”为1:
- 如果在所有页表级别中禁用分页或 U/S = 1,并且在所有 EPT 级别中 EPT 位 10 = 1,则允许获取。
- 如果 CPL
如果“EPT基于模式的执行控制”为0:
- 如果在所有页表级别中禁用分页或 CPL
此外,如果 CR4.PAE 为 1,则所有页表级别的第 63 位(XD)必须为 0。