Есть ли способ увидеть прерывания BIOS, которые возникают в Windows? Можно ли использовать "debug" (команда cmd) для отправки прерываний в BIOS и отслеживания некоторых результатов?
2 ответа
Аппаратные прерывания
Кажется, кто-то сказал вам, что Windows NT работает поверх BIOS, из чего вы пришли к выводу, что прерывания направляются BIOS, который затем "поднимается до Windows".
Это совершенно неправильно, и ошибочная модель работы операционной системы. Помимо ACPI, режима управления системой и (для некоторых видеоадаптеров) поддержки VESA, ваша микропрограмма BIOS практически ни на что не влияет после запуска Windows. Прерывания (кроме SMM) не выставляются BIOS. Они представлены на уровне аппаратного абстрагирования Windows, который выполняет все низкоуровневые покерные решения с APIC, IDT и векторами прерываний, необходимыми для отображения прерываний и передачи их ядру Windows.
Чтобы отследить обработку сигналов прерывания в Windows NT, необходимо ядро отладки, взаимодействующее с утилитой отладчика ядра . Тогда можно делать что-то с помощью команд отладчика, таких как !idt
!apic
и пр.
Инструкции по прерыванию
Для вызова функций в API микропрограммы BIOS - которые (в основном, но не универсально) вызываются с помощью инструкции int
и, таким образом, вводят в заблуждение также «прерывания, отправляемые в BIOS» - и отслеживают их выполнение, вам нужна DOS (или какая-то другая 16-разрядная операционная система реального режима). В частности, вам нужен инструмент для отладки DOS. Вы можете запустить этот инструмент либо в реальной DOS, такой как OpenDOS или FreeDOS, либо на виртуальной машине DOS, такой как NTVDM, в Windows NT. Имейте в виду, что последняя виртуальная машина DOS повлияет на функциональность прошивки.
Вы не можете вызывать функции API встроенного ПО BIOS - которые ожидают, что процессор (по-разному) будет в 16-битном реальном режиме, 16-битном защищенном режиме v8086 или 16-битном защищенном режиме кольца 0 - в 32-битном защищенном режиме кольца 3. Машинный код просто не будет работать правильно, даже если у вас был способ отобразить его в виртуальную память. Такая функциональность прошивки просто недоступна из режима приложений в операционных системах, таких как Windows NT или Linux. (В любом случае, это не очень полезно для приложений в таких операционных системах.)
Вы, вероятно, можете сделать это, в конце концов, через BIOS, я думаю, есть постоянные прерывания - такие события, как ввод с клавиатуры, диск io, в основном все. Итак, я собираюсь сказать «Да, есть способ».
Что касается открытия пути .. Там это сообщество , которое удалось их собственная с открытым исходным кодом BIOS прошивок Coreboot. Я предлагаю прочитать их документацию для разработчиков и, возможно, найти некоторых из их разработчиков на IRC и поговорить с ними.
Вам строго нужно сделать это из Windows? Если вас интересует только BIOS, вам, возможно, повезет, изучая это с помощью утилит Linux. Но это за пределами моего настоящего опыта.
Удачи.