Реферат: Система защиты от несанкционированного копирования
VESAVersion – версия VBE (VESA BIOS Extension);
VideoMemory – объём видеопамяти;
VESAOEMString – информация производителя видеокарты.
Рассмотрим теперь процесс определения этих характеристик.
??????????? ????? ????.
В области данных BIOS по адресу 0:0410h хранится двухсловная переменная, называемая списком оборудования. Список оборудования включает в себя число НГМД. Список оборудования заполняется компьютером во время POST (Power-On Self-Test), ROM-программы, выполняемой во время включения ПЭВМ. Биты 6-7 содержат число НГМД, уменьшенное на единицу.
??????????? ???? ??????????? ????, ?????? ??????? ? ??????????? ??????.
В современных компьютерах для хранения текущей конфигурации аппаратных средств используется энергонезависимая память CMOS. Эта память с точки зрения программиста состоит из набора ячеек, доступ к которым для чтения и записи выполняется через порты ввода-вывода с адресами 70h и 71h. Процедура чтения ячейки CMOS состоит из двух шагов. На первом шаге программа записывает в выходной порт с адресом 70h номер ячейки, из которой необходимо прочитать информацию. На втором шаге программа читает содержимое данной ячейки из входного порта с адресом 71h. В памяти CMOS хранится текущее время и дата, сведения о конфигурации системы, результат тестирования при включении питания и другая информация. В том числе в ячейке с адресом 10h хранится тип накопителей НГМД, в ячейках с адресами 15h-16h – объём основной памяти и в ячейках с адресами 17h-18h – объём расширенной памяти (это значение дублируется в ячейках 30h-31h).
??????????? ???? ??????? ROM-BIOS.
Дата издания ROM-BIOS в коде ASCII хранится в области данных BIOS по адресу F000:FFF5 и занимает 8 байт.
??????????? ???? ???????????? ?????????? ? ??????????, ??????????????? ??? ???????????.
Для определения процессоров младше Pentium использована методика, изложенная в [14].
Способ распознавания процессоров Intel 8086/8088 основан на том факте, что биты 12-15 регистра FLAGS всегда установлены в единицу. Прежде всего программа переписывает текущее содержимое регистра FLAGS в регистр AX. Для этого используется стек:
PUSHF
POP AX
Далее программа пытается записать нулевые значения в биты 12-15 регистра FLAGS:
AND AX,0FFFh
PUSH AX
POPF
Теперь нужно проверить, изменилось ли содержимое указанных битов регистра FLAGS. Для этого новое содержимое регистра FLAGS переписывается через стек в регистр AX, а затем после наложения маски 0F000h, сравнивается со значением 0F000h:
PUSHF
POP AX
AND AX,0F000h
CMP AX,0F000h
JE this_8086
Если биты 12-15 остались установленными в единичное значение, программа работает на процессоре Intel 8086/8088, если нет – в компьютере установлена более старшая модель процессора.
Программные коды для определения других типов процессора не приводятся, так как они аналогичны приведённым.
В процессоре Intel 80286, когда он работает в реальном режиме адресации, биты 12-15 регистра FLAGS всегда сброшены в нуль, что можно использовать для обнаружения этой модели процессора.
Для того, чтобы отличить процессор Intel 80386 от процессоров старших моделей, можно попробовать установить в регистре EFLAGS бит 18. Этот бит был впервые определён в процессоре Intel 80486 для сигнализации ошибки выравнивания. Его невозможно установить в процессоре Intel 80386.
Отличительная особенность процессора Intel 80486 – невозможность изменения состояния бита 21 регистра EFLAGS. Этот бит используется процессорами Intel Pentium и более старшими моделями процессоров Intel для определения возможности вызова команды идентификации процессора CPUID.
В новых процессорах фирмы Intel (включая все процессоры Pentium и старше) появилась новая команда CPUID, специально предназначенная для определения модели процессора. В программе эту команду можно определить в виде макроса следующим образом:
CPUID MACRO
DB 0Fh