X86 使用嵌套分页进行应用程序级分页

X86 使用嵌套分页进行应用程序级分页,x86,paging,virtualization,X86,Paging,Virtualization,我不太熟悉较新CPU的嵌套分页虚拟化功能,因此这个问题可能不是一个好问题,但我想到了一个想法: 是否可以在应用程序中使用嵌套分页来启用我们自己的分页机制(类似于内存映射文件) 这可以允许您将内存访问从应用程序的任何位置重定向到其他任何位置,即使您无法访问正在重定向的代码。(不过,它甚至不需要映射到文件——当页面出错时,您可以动态生成数据。)我认为这不可行。我不知道细节,但我认为设置嵌套页表必须在hypervisor模式下完成,这比内核模式更具特权。要在用户模式下使用它,您需要运行一个hyperv

我不太熟悉较新CPU的嵌套分页虚拟化功能,因此这个问题可能不是一个好问题,但我想到了一个想法:

是否可以在应用程序中使用嵌套分页来启用我们自己的分页机制(类似于内存映射文件)


这可以允许您将内存访问从应用程序的任何位置重定向到其他任何位置,即使您无法访问正在重定向的代码。(不过,它甚至不需要映射到文件——当页面出错时,您可以动态生成数据。)

我认为这不可行。我不知道细节,但我认为设置嵌套页表必须在hypervisor模式下完成,这比内核模式更具特权。要在用户模式下使用它,您需要运行一个hypervisor,该hypervisor为用户模式(或内核模式,然后内核模式将其提供给用户模式)提供某种API。使用用户模式应用程序中的一些扩展CPU指令并不是一件简单的事情。我怀疑这些收益是否足以证明所需的努力是合理的

编辑:听起来我是对的。引用, 第4.2.3节:“使用嵌套分页”:

嵌套分页是一种供虚拟机监控程序使用的功能。客人 运行时无法观察到任何差异(性能除外) 在使用嵌套分页的虚拟机监控程序下。嵌套分页不起作用 要求对来宾软件进行任何更改


我认为这不可行。我不知道细节,但我认为设置嵌套页表必须在hypervisor模式下完成,这比内核模式更具特权。要在用户模式下使用它,您需要运行一个hypervisor,该hypervisor为用户模式(或内核模式,然后内核模式将其提供给用户模式)提供某种API。使用用户模式应用程序中的一些扩展CPU指令并不是一件简单的事情。我怀疑这些收益是否足以证明所需的努力是合理的

编辑:听起来我是对的。引用, 第4.2.3节:“使用嵌套分页”:

嵌套分页是一种供虚拟机监控程序使用的功能。客人 运行时无法观察到任何差异(性能除外) 在使用嵌套分页的虚拟机监控程序下。嵌套分页不起作用 要求对来宾软件进行任何更改


那没有道理。。。VirtualBox使用嵌套分页,但它与虚拟机监控程序模式无关(对吗?)。@Mehrdad:我所知道的是,当我安装它时,我必须点击大量有关未签名内核模式驱动程序的警告。@Hugh:等等,但Windows启动后,如何启动虚拟机监控程序?这对我来说毫无意义。@Mehrdad:好吧,我读了一些书,并添加了一个参考资料来支持我的无知推测:)@Hugh:嗯,很有趣,谢谢但问题仍然存在:在Windows启动后,VirtualBox如何启动自己的虚拟机监控程序?即使虚拟机监控程序是稳定的(我对此表示怀疑,因为VB本身几乎不稳定,更不用说这么重要的组件了),它也不可能在操作系统之后启动,不是吗?(它不像是在OS加载程序之前加载的,所以…)这没有意义。。。VirtualBox使用嵌套分页,但它与虚拟机监控程序模式无关(对吗?)。@Mehrdad:我所知道的是,当我安装它时,我必须点击大量有关未签名内核模式驱动程序的警告。@Hugh:等等,但Windows启动后,如何启动虚拟机监控程序?这对我来说毫无意义。@Mehrdad:好吧,我读了一些书,并添加了一个参考资料来支持我的无知推测:)@Hugh:嗯,很有趣,谢谢但问题仍然存在:在Windows启动后,VirtualBox如何启动自己的虚拟机监控程序?即使虚拟机监控程序是稳定的(我对此表示怀疑,因为VB本身几乎不稳定,更不用说这么重要的组件了),它也不可能在操作系统之后启动,不是吗?(它不像在OS加载程序之前加载,所以…)