MMU Virtualization via Intel EPT - Index
文章概览
在收到大量完成EPT系列的请求后,我转而撰写这个关于使用Intel EPT实现MMU虚拟化的5部分系列文章。本系列旨在可用于您自己的虚拟机监控程序项目,或与几个月前发布的CPU虚拟化系列结合使用。由于大多数读者会跟随学习,我将参考先前项目中的内容,但实现方式在所有类型2的虚拟机监控程序项目中都相对类似。本系列仅适用于在具有可用虚拟化技术特性的Intel处理器上运行的读者。
本系列的目标是让读者学习分页、扩展页表、各种转换机制的技术细节,以及如何在虚拟化项目中利用这些技术。系列结束时,读者将拥有一个可工作的EPT基础,并应该能够在未来的项目中设计和实现自己的EPT基础设施。
每篇文章的所有概念、其重要性、更详细信息的参考等都将像我的其他博客文章一样链接,最后还会有一个推荐阅读部分,以满足您对细节和知识的渴求。还需要阅读一些内容以完全理解VMX地址转换中使用的某些机制。
注意:本系列不适合那些对为AMD处理器编写虚拟机监控程序感兴趣的读者,但在AMD系列发布时,它可能会提供良好的技术信息以提供帮助。本虚拟机监控程序将使用C语言为Intel x86-64(64位)编写。
各部分内容
第0部分 - 技术细节
本部分将向读者介绍围绕扩展页表的各种子主题。它将涵盖Intel EPT的动机、辅助地址转换的机制、性能问题,以及在学习分页和分页结构时经常引用的各种缓存组件的介绍。
第1部分 - 实现 - 结构定义和初始化
在本文中,读者将获得预制的结构及其用途的所有细节。这些结构将在本系列的主要EPT实现中使用。本文还将详细说明EPT在VMX下正常运行所需的初始化和传递过程。在本文结束时,读者将准备好EPT在其虚拟机监控程序中运行。
第2部分 - 实现 - EPT辅助函数、页遍历、EPT违规和拆卸
第三部分描述了各种EPT引起的VM退出以及如何处理它们。实现各种拆卸函数和辅助客户机到主机地址转换的例程。读者将编写处理程序,并了解与Intel EPT相关的各种错误配置、违规和异常。
第3部分 - 集成和测试
本文将首先将EPT初始化函数实现到CPU虚拟化系列的现有项目中,然后进行测试运行以确保EPT正常运行,并有意生成违规以确保我们命中正确的处理程序。
第4部分 - EPTP切换和页钩子
作为奖励,我添加了这部分,因为相当一部分读者对安全研究感兴趣。EPTP切换和页钩子的使用可用于隐藏信息、钩取受保护的函数,或保护信息不被 unwanted 方查询。本部分中的一个示例将用于显示对Windows内核函数的钩子,该钩子将在查询时欺骗代码完整性信息。另一个示例将防止应用程序在尝试查看受保护应用程序地址空间的内容时获取任何有用信息。
补充说明
在阅读本系列任何文章之前,强烈建议如果您打算精通虚拟化和微架构方面的知识,请阅读推荐阅读材料,全部阅读 - 并做笔记并将知识付诸实践。这将在每篇文章中重复,并在您面前强调,因为细节很重要。每篇文章中的其他补充阅读材料将基于当天的内容,您可能会发现来自其他虚拟机监控程序作者的一些推文、博客或要点。所有使用的材料都将注明出处!
我还要感谢Aidan Khoury在各种项目工作中提供的宝贵见解。从他那里传给了我很多巧妙的技巧,我期待与读者分享。
再次感谢您的兴趣,希望您在本系列中学到一些新的和有价值的东西。
希望您喜欢这个系列!在评论部分留下反馈、问题、评论或建议。