zhouhe VT(八) PAE模式下开启EPT
前言:
代码在非PAE模式下运行正常,在PAE模式下会报三重错误
一、分析原因
Intel手册Table24-4下写了PDPTE的四个寄存器
PAE模式下使用的是2-9-9-12分页模式
PDPTE只有四项,为了提升效率,Intel直接把这四项设为了四个高速寄存器 PDTPE Registers
参见4.4
所以,在PAE模式下寻址的时候,虚拟机直接找那四个高速缓存寄存器
我们之前没有设置过这四个寄存器,虚拟机找不到PTPDE的地址,无法寻址,故产生三重错误
二、设置四个高速缓存寄存器
在winxp下PDPTE的第零项固定在0xc0600000的位置,第一项固定在0xc0600000 + 0x1000的位置,以此类推...
我们直接进行填充
如下图
三、处理蓝屏问题1
我们运行的时候会出现蓝屏问题
Host在接管cr3的读取的时候,没有更新PDPTE寄存器的物理地址,这样仍会导致内存读写异常
我们需要在 Host接管cr3后更新PDPTE寄存器的物理地址
四、处理蓝屏问题2
Host在接管Cr3读写后,Cr3已经切换了,而我们仍在用以前的Cr3更新PDPTE寄存器的物理地址,这样仍然会导致内存读写异常。。。
我们需要用更改后的Guest的CR3进行更新PDPTE的物理地址
五、运行
处理完上面两个问题后,我们的代码就可以在PAE状态下运行了
至此代码基本完工
该节的代码链接:
__EOF__

本文作者:_TLSN
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16157760.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16157760.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现