Memory 虚拟地址到物理地址的转换

Memory 虚拟地址到物理地址的转换,memory,memory-management,operating-system,virtual-machine,qemu,Memory,Memory Management,Operating System,Virtual Machine,Qemu,我有一个问题,我们如何翻译虚拟地址,并获得该地址到物理内存位置的映射 我有一个运行在Qemu上的Windows虚拟机,Qemu托管在我的Ubuntu Linux系统上。我想知道如何将Windows VM上运行的程序映射到主机/Linux机器上的物理内存位置 我们如何进行虚拟到物理的映射 谢谢,预告 我们如何转换虚拟地址并获得该地址到物理内存位置的映射 在windows中,您可以使用内核调试器“KD”(属于“将虚拟地址转换为物理地址”或: 使用!vtop进行地址转换。假设您正在调试运行MyApp.

我有一个问题,我们如何翻译虚拟地址,并获得该地址到物理内存位置的映射

我有一个运行在Qemu上的Windows虚拟机,Qemu托管在我的Ubuntu Linux系统上。我想知道如何将Windows VM上运行的程序映射到主机/Linux机器上的物理内存位置

我们如何进行虚拟到物理的映射

谢谢,预告

我们如何转换虚拟地址并获得该地址到物理内存位置的映射

在windows中,您可以使用内核调试器“KD”(属于“将虚拟地址转换为物理地址”或:

使用
!vtop
进行地址转换。假设您正在调试运行MyApp.exe进程的目标计算机,并且希望调查虚拟地址0x0012F980。以下是您将使用!vtop扩展来确定相应物理地址的过程

在linux中有
/proc/pid/pagemap
文件(其中pid是目标进程的进程ip-您应该知道每个进程都有自己的虚拟到物理映射),并且有关于pagemap解析的帖子:

我有一个运行在Qemu上的Windows虚拟机,Qemu托管在我的Ubuntu Linux系统上

在您的例子中,有两个嵌套的操作系统。windows操作系统中有一些windows应用程序。windows操作系统认为它有一些物理内存;但实际上它是Qemu模拟器对物理内存的模拟

Qemu(在最简单的非加速情况下)只是linux中的一个用户应用程序;它只有来自linux的虚拟内存。因此,在Windows中模拟为物理(来宾物理)的内存实际上是主机虚拟内存(但它不是1对1映射,还有Qemu与一些“内存后端”的转换,这可能会将巨大的客户物理区域映射到主机虚拟区域(也请检查)

我想知道如何将Windows VM上运行的程序映射到主机/Linux机器上的物理内存位置

使用Windows KD debugger将来宾虚拟地址从内部程序转换为来宾物理地址。然后使用qemu命令行查找、如何(托管虚拟地址)、获取主机虚拟地址,并使用
pagemap
特殊文件从

/proc/`pidof qemu-system-x86_64`/pagemap

也许看看Qemu文档……也就是说,在一个进程中找到某个内存的物理地址并不意味着你可以从另一个进程中访问它……听说过内存保护吗?你基本上是在问程序如何在虚拟机中运行,这太广泛了。读一下虚拟机,你就会知道我的窍门了t、 如果不是,请带着一个具体的问题回来。如果这不是你想要的,而且我误解了你,那么你问的问题就不清楚了。不管怎样,试试看。