0

У меня вопрос о том, как мы можем перевести виртуальный адрес и получить отображение этого адреса в физическую память.Перевод виртуального адреса на физический адрес

У меня есть виртуальная машина Windows, работающая на Qemu, которая размещена на моей системе Linux Ubuntu. Я хочу знать, как мы можем сопоставлять программы, запущенные на виртуальной машине Windows, в физическую ячейку памяти на машине хоста/Linux.

Как мы можем сделать это виртуальным для физического сопоставления?

Спасибо и заранее.

+0

Может быть, посмотреть на документации Qemu ... Это говоря, что найти физический адрес некоторой памяти в процессе не означает, что вы сможете получить доступ к ней из другого ... Когда-либо слышали о защите памяти? – Macmade

+0

В основном вы спрашиваете, как программы запускаются на виртуальной машине, которая слишком широка. Читайте о виртуальных машинах, и вы получите это. Если нет, вернитесь с * конкретной * проблемой. Если это не то, чего вы хотите, и я вас не понимаю, непонятно, о чем вы спрашиваете. В любом случае попробуйте [улучшить свой ответ] (http://stackoverflow.com/help/how-to-ask). – Downvoter

ответ

1

как мы можем перевести виртуальный адрес и получить отображение этого адреса в физической ячейке памяти.

В окнах вы можете найти физический адрес из виртуального, используя отладчик ядра «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/:

Адрес Conversion Использование !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

У меня есть виртуальная машина Windows, работающая на Qemu, которая размещена на моей системе Linux Ubuntu.

В вашем случае есть две вложенные ОС. В ОС Windows есть приложение для Windows. ОС Windows думает, что у нее есть физическая память; но на самом деле это эмуляция физической памяти эмулятором Qemu.

Qemu (в простейшем случае без ускорения) только одно из пользовательских приложений в Linux; он имеет только виртуальную память от Linux. Таким образом, память, которая эмулируется для Windows как физическая (гостевая-физическая), фактически является виртуальной виртуальной машиной (но это не сопоставление 1 к 1, есть также 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