【发布时间】:2014-10-30 17:18:55
【问题描述】:
我是 qemu 开发的新手。当内存分配给虚拟机时,我想打印所涉及的相应地址。
例如,当我调用以下命令时
qemu-system-i386 ubuntu.img -m 1G
我需要能够打印所涉及的虚拟地址和物理地址。如上面涉及的1G内存:
访客虚拟地址 = 0x12345678..to 0x87654321..
Guest Physical Addr = 0x23456781..to 0x74536733..(如果我的理解正确,这是映射到主机虚拟内存的地址)。
注意: 以上数字仅供说明。
当我查看 qemu 的源代码时,我看到我们在命令中提到的这个大小被分配为 |ram_addr_t| 的一部分。堵塞。但我无法找到如何继续找到此尺寸的偏移量。请尽早在这方面帮助我。
【问题讨论】:
-
我认为您对 QEMU 的工作方式有误解。每个 QEMU VM 都作为主机系统上的一个进程存在,就像任何其他进程(如 shell 或桌面窗口管理器)一样。因此,它的虚拟地址范围是 0 到 2^N-1(其中 N 是 32 或 64)。将其映射到物理内存与任何其他进程的工作方式相同,并且不太可能是静态的或连续的。另外,这不是编程问题...
-
我知道host把qemu vm当作一个进程。这个问题与主机系统无关。我想加密 qemu 分配给 vm 的某些内存部分的内容。 qemu 分配的内存来自它维护的池(当然它被映射到主机上的虚拟内存),但与主机内存管理系统无关。我想知道 qemu 分配给 vm 并由 qemu 维护的地址范围,而不是主机。所以,你需要修改它的 qemu 源代码。如果你有任何想法,请告诉我。