【问题标题】:Translation of virtual address to physical address虚拟地址到物理地址的转换
【发布时间】:2017-07-07 10:27:08
【问题描述】:

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

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

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

谢谢并提前。

【问题讨论】:

  • 也许看看 Qemu 文档...话虽如此,在一个进程中找到某些内存的物理地址并不意味着您可以从另一个进程访问它...听说过内存保护?
  • 您基本上是在问程序如何在虚拟机中运行,这太宽泛了。阅读有关虚拟机的信息,您就会掌握它的窍门。如果没有,请返回特定问题。如果那不是您想要的并且我误解了您,则不清楚您在问什么。不管怎样,试试to improve your answer

标签: memory memory-management operating-system virtual-machine qemu


【解决方案1】:

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

在 Windows 中,您可以使用内核调试器“KD”从虚拟中找到物理地址( Windows SDK 的一部分: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/

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

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

我有一个在 Qemu 上运行的 Windows VM,它托管在我的 Ubuntu Linux 系统上。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 2015-05-04
    • 2019-07-29
    • 2015-01-29
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多