Я делаю некоторые эксперименты с UEFI и не были в состоянии обернуть мою голову вокруг виртуальной адресации ..с UEFI Virtual для перевода физической памяти
Я написал заявление о UEFI, который содержит строку «CatsAreAwesome». У меня есть приложение для печати виртуального адреса этой строки. Он меняет каждое исполнение, поэтому я буду придерживаться одного конкретного примера. Код печатает, что строка находится на виртуальном адресе 0x120ac3c0. Если приостановить виртуальную машину и проверить файл VMEM я нахожу два экземпляра строки на адрес 0x1209e410 и 0x12ab000
От вызова getmemorymap в UEFI Я считаю, что раздел памяти те два падения являются
TYPE PhysStart PhysEnd VirtStart VirtEnd
EfiConventionalMemory 1209C000 120A4000 0 8000
EfiLoaderCode 120A4000 120B1000 0 D000
I не понимают, как работает перевод. Виртуальный старт для этих двух разделов равен 0, что, я бы подумал, означало сопоставление идентичности, но виртуальные и физические адреса не выстраиваются в линию, так что это явно неверно. Может ли кто-нибудь объяснить мне, как работает перевод? Как мне перейти от виртуального к физическому или наоборот?
Мое приложение печатает строку и собирает карту памяти, чтобы карта была собрана во время работы приложения. Приложение затем ждет ввода пользователя, я приостановил vm в течение этого времени, так что физические адреса были найдены во время работы приложения.
Тогда почему адрес, напечатанный в моем приложении, не совпадает с физическим адресом системы? –