EPT的开启与处理
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html
EPT的开启与处理
1. EPT的概念
EPT(Extend Page Table)扩展页表机制,可以让Guest机使用一份自己构建的页表
GPA(Guest-Physical Address)、HPA(Host-Physical Address)
当Guest访问内存时,其最终会生成一个GPA,其EPT的页表定义在Host端,处理器在收到guest传递过来的之后,通过EPT页表转换为HPA,从而访问物理内存。
理解转换的关键思路:线性内存地址其只代表偏移,与页表基址的位置没有任何关系! 因此我们可以保证映射正确的基础之上随意更改页表基址,只要通过偏移得出正确的结果。
2. EPT的开启
关于EPT的一个重要寄存器是IA_32_EPT_VPID_CAP,该寄存器表明当前CPU对EPT功能的支持情况。
3. EPT页表的构建 - EPTP
EPTP(Extend Page Table Pointer),被称为页表拓展指针,当构建好整个页表之后,将该EPTP写入指定寄存器中,之后开启EPT模式。
EPTP的数据结构如下,我们构建的是 Walk Length为3的,因此不需要构建PTT页表,只需构建 PML4、PDPTT、PDT 三张内存页表。
4.EPT violation导致的VM-exit
四种情况会导致 EPT violation: not-present、read 、 write、fetch(execute);
出现这种情况,我们先GPA->HPA,然后找到其页的数据结构将有关位置位;
其 Exit-Qualification 获取的就是详情,其信息如下: