Мапиться ли BIOS в виртуальную память винды ? и если мапиться то как его там обнаружить ? Пробовал написать драйвер и использовать NTKERNELAPI функцию MmGetVirtualForPhysical. Как я понимаю BIOS лежит по физическому адресу 0xfffe0000 (размер моего BIOS 128Kb), но на выходе всегда получаю 0. зы я только начинающий системный программист, так что если у кого то есть ссылки на документацию по этой теме то с радостью ознакомлюсь
Спасибо за сслыку, буду разбираться. Уточню еще раз, мне не надо работать с функциями BIOS или получать какой то доступ к внутренним его частям. Мне лишь надо знать находится ли он в виртаульном адресном пространстве винды или нет.
Neraverin А как только узнаете, что BIOS находится в виртаульном адресном пространстве винды, что будете делать? Наверное, полезете в его внутренние части. Пинчакко раньше часто заходил на WASM.RU\forum в раздел WASM.ENGLISH если захотите можно связаться...
Дело в том, что сама Windows у меня находится на виртуальной машине.BIOS виртуальный, но винда работает с ним так же как и с ностоящим. В BIOS я могу и так внести любые изменения, которые захочу. Меня интересует сама возможность перехода в BIOS и выполнения там заранее размещенного кода.
Neraverin На сколько я помню, BIOS размещается в памяти Read-Only (ROM или ПЗУ) и при следующей перезагрузке все изменения "внесенные в BIOS" в ОЗУ сотрутся, кроме того настоящий BIOS содержится в упакованном виде, каким это образом туда вы решили внести изменения и "заранее размещать код"? Странный какой-то "начинающий системный программист" может быть вам в раздел WASM.VIROLOGY?
Mikl___ Нихрена, из ос, примяком можно писать в чип bios. Кстати, в книге Салихана это хорошо описано и дан код.
featurelles там вроде перемычка была, чтобы не писали? Хорошо, BIOS размещался в ROM. Честно говоря, я давно читал "Руководство по исследованию кода БИОС" многое не помню
Mikl___ Я также как и вы) ничего не помню.. учил это года три назад (.... Вообще это интересная тема. Кстати, есть вопрос. Как "Вы" (кто угодно) тестите код для bios для разных материнок?
Еще одно пояснение. Есть винда, которая крутится под qemu-kvm(виртуальная машина с аппаратной виртуализацией под linux). Виртуальная машина предоставляет винде виртуальный bios(seabios исходные коды его имеются). Мне не так важно read only там или не read only. в bios будет дописан некоторый код. Задача выполнения этого кода сводится к поиску bios в виртуальном пространстве windows.
Neraverin Так какой вопрос то) я не понял. "BIOS. Дизассемблирование, модификация, программирование". Не помню какая страница.(лень смотреть)
А зачем ты ищешь уже отмапленные проэкции? Создай свою. MmMapIoSpace() позволяет драйверу спроецировать себе в ядро определенный участок физической памяти, базовый адрес и размер задается. И пусть не смущает, что к одной памяти создано несколько проекций (до тех пор, пока не придется синхронизировать доступ к общим переменных/объектам/...)
Проблема в том, что если проекция уже есть, то эту проекцию проще найти из гипервизора, чем запустить из гипервизора функцию ядра, сразу же после загрузки этого ядра, которое опять же прийдется искать и парсить для нахождения этой функции. Вся фишка как раз в том, чтобы убрать драйвер из винды и не связываться с подписью драйверов под x64
Оригинальный образ BIOSа из верхних адресов после загрузки для работы не нужен и никуда не отображается. Рекомендую посмотреть на копию в нижних адресах, F0000 - FFFFF, с ней шансов больше.
Также неплохо освежить знания о shadow memory и как (или если) контроллер памяти отсылает запросы к LPC/FWH-памяти, исходя из диапазонов адресов.