Как считать слово из области данных BIOS на C++

88
09 декабря 2021, 20:10

Как считать 2-байтное слово из области данных BIOS по адресу 0040:0010 на C/C++?

ОС: Windows 10 x64.

Answer 1

Добавлю от себя. Ответ gbg - верный, есть более тернистые способы, добавлю немного о них

  1. Из под уровня драйвера, используя специальные АПИ можно прочитать память BIOS, драйвер связывается с приложением через DeviceIoControl информацию можно передать на уровень software. Читать изучать Driver Development Kit + проблемы - может понадобится админский доступ.

  2. Зная что бывает [1] можно либо случайно в хакерских тулзах, или долго нудно случайно найти библиотеку которая позволяет считать память ВIOS, и пользуясь ею считать (будет плюс dll и плюс файл драйвера).

  3. 16-битные windows-приложения и dll имеют доступ к данному участку памяти для совместимости в режиме эмуляции. В WinXP это работало без проблем, за 7 и 10 не могу сказать. Старички 16-битные windows-приложений - winhelp.exe из WinXP, msword 6-той версии и ниже. Так же есть некоторые популярные софтины, например DOP (digital orkestrator). Писать такие приложение позволяют старые версии компилятора borland, delphi 1-й версии, и т п.

  4. Емуляция DOS, под 64-бита скорее всего понадобится DOSBOX

  5. Возможно (если это разрешено) можно загрузиться с старенького "реанимаитора" DOS, и написав под DOS софтину без проблем её запустить. Более сложный вариант - свой загрузчик.

Answer 2

Из приложения под Windows это сделать невозможно, хотя бы потому, что семейство WINDOWS NT, к которому относится и Windows 10, подменяет собой BIOS в его классическом понимании.

То есть да, можно написать программу на C/С++, но компилировать ее надо будет под DOS, чтобы она выполнялась в реальном режиме процессора и имела доступ ко всем ресурсам. Под вендой такая программа будет работать в режиме эмуляции реального режима внутри защищенного, для чего понадобится DOSBOX, либо виртуалка с DOS.

READ ALSO
Как конвертировать pdf в doc и odt

Как конвертировать pdf в doc и odt

Я нашел много алгоритмов по конвертации doc в pdf,но не нашел обратного алгоритмаПодскажите пожалуйста как сделать это на windows и на linux

197
Перемещение данных между lua и c++

Перемещение данных между lua и c++

Собственно ситуация такая: у меня есть библиотека для lua (написана на c++) которая предоставляет доступ к некоему объекту из c++ кода (допустим,...

96
Как остановить бесконечный поток из нового диалогового окна

Как остановить бесконечный поток из нового диалогового окна

Запустил бесконечный поток из окна mainwindowСоздал диалоговое окно menu по нажатию на кнопку мне нужно остановить бесконечный поток

154