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

问题描述:

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

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

我们如何做到这一点虚拟到物理映射?

感谢和提前。

+0

也许看QEMU的文档......这有人说,在一个过程中找到一些内存的物理地址并不意味着你可以从另一个内存访问它......曾听说过内存保护? – Macmade

+0

你基本上在问如何在虚拟机中运行程序,这太宽泛了。阅读关于虚拟机的信息,你会得到它的窍门。如果不是,请回到* specific *问题。如果这不是你想要的,而且我误解了你,那么你不清楚你在问什么。无论哪种方式,尝试[以改善您的答案](http://*.com/help/how-to-ask)。 – Downvoter

我们如何转换虚拟地址并获得该地址到物理内存位置的映射。 https://msdn.microsoft.com/en-us/library/windows/hardware/ff539310(v=vs.85).aspx“转换虚拟地址到物理地址”或http://resources.infosecinstitute.com/translating-virtual-to-physical-address-on-windows-physical-addresses/

在窗口中,您可以从虚拟的使用内核调试器“KD”的 Windows SDK(部分找到物理地址

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

在linux下有/proc/pid/pagemap文件(其中pid是目标进程的过程中IP - 你应该知道,每个进程都有自己的虚拟到物理映射),并有一篇关于页映射解析:http://fivelinesofcode.blogspot.ru/2014/03/how-to-translate-virtual-to-physical.html

我在我的Ubuntu Linux系统上托管的Qemu上运行Windows VM。

在你的情况下,有两个嵌套的操作系统。 Windows操作系统中有一些Windows应用程序。 Windows操作系统认为它有一些物理内存;但实际上它是由Qemu模拟器仿真物理内存。

Qemu(在最简单的非加速情况下)只是Linux中的用户应用程序之一;它只有Linux的虚拟内存。因此,作为物理(guest-physical)模拟Windows的内存实际上是host-virtual(但它不是1对1的映射,也有一些“memory-backend”的qemu转换,它可能映射巨大的区域客户 - 物理 - 主机 - 虚拟 - http://blog.vmsplice.net/2016/01/qemu-internals-how-guest-physical-ram.html;也检查Print range of memory addresses in qemu)。

我想知道我们如何可以映射在Windows虚拟机上运行的主机/ Linux机器上的物理存储位置的程序。

使用Windows KD调试器来宾虚拟地址从内部程序转换成客户 - 物理地址。然后用QEMU命令行找到,如何qemu mapped guest-physical to virtual memory of qemu process(托管虚拟),获取主机的虚拟地址,并将其转换为主机物理与pagemap特殊文件从

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