РАЗРАБОТКА ПРОГРАММНЫХ ЭМУЛЯТОРОВ ПРОЦЕССОРОВ
СЕМЕЙСТВА Intel x86
С. Б. Воинов
«МАТИ» - Российский
Государственный Технологический Университет
им. К. Э. Циолковского,
Россия.
В
настоящее время отсутствуют полностью функциональные программные эмуляторы
процессоров семейства Intel x86,
написанные под эту же аппаратную платформу и позволяющие помимо системы команд
эмулировать функции таких устройств IBM PC как
контроллер прерываний, контроллер прямого доступа к памяти и других системных
устройств. Использование такого рода эмуляторов представляет большой научный
интерес.
Подобные
эмуляторы могли бы использоваться для следующих целей:
·
Детальное изучение системы команд процессоров семейства Intel x86 и особенностей её применения.
·
Изучение неоднозначности системы команд.
·
Знакомство с защищённым режимом работы процессора 80386 без дополнительных
неудобств, связанных с необходимостью создания соответствующего программного
окружения.
·
Реализация прототипов модулей программной защиты информации, защиты от
дизассемблирования и отладки.
·
Снятие программных защит информации.
·
Исследования в области вирусологии без опасности повредить программно-аппаратные
средства PC.
·
Изучение работы и протоколов взаимодействия аппаратных и программных
средств.
При разработке программных
эмуляторов процессоров к ним должны предъявляться требования, исходя из общих
параметров эмуляторов. В общем случае программные эмуляторы процессоров
характеризуются следующими основными параметрами:
1.
Программная совместимость, т. е. насколько полностью эмулятором поддерживается
система команд эмулируемого процессора. К программной совместимости можно также
отнести особенности выполнения команд эмулятором и процессором. Например,
процессор Intel 8086 выполняет с префиксом повторения только
цепочечные команды (MOVS, LODS, STOS, CMPS, SCAS). Другие команды, например REP MOV AX, CX выполняются только один
раз, в независимости от используемого префикса повторения.
2.
Быстродействие по сравнению с эмулируемым процессором. Как правило, по
скорости выполнения различных операций процессор превосходит эмулятор. Однако
это в большинстве случаев справедливо, когда эмулируемый процессор и процессор,
для которого написан эмулятор, имеют быстродействие одного порядка. С учётом
вычислительной мощности современных процессоров семейства Intel x86 (скажем, Pentium III, Pentium
4) эмуляция функций процессора Intel 8086 будет выполняться не
только с такой же скоростью, как и у самого 8086, но даже быстрее.
Быстродействие конкретного эмулятора зависит не только от аппаратной конфигурации
компьютера, на котором он выполняется, но и во многом от того, как он написан.
3.
Поддержка системных и периферийных устройств. Сам по себе эмулятор
процессора не может быть использован для широкого круга задач, перечисленных
выше. Необходима поддержка системных и некоторых периферийных устройств для исследования работы существующих программ и для
изучения протоколов взаимодействия между аппаратными и программными средствами.
Применительно к процессорам семейства Intel x86
желательна поддержка эмулятором таких устройств как контроллер прерываний, контроллер
прямого доступа к памяти, системный таймер, некоторые периферийные микросхемы
(например, контроллер клавиатуры) и другие.
4.
Поддержка устройств хранения информации. В
большинстве случаев работа с эмулятором сопровождается загрузкой в память
различных программ. Не смотря на то, что программы могут быть загружены в
память эмулятора «вручную» (через пользовательский интерфейс эмулятора), они
могут функционировать неверно из-за отсутствия операционной системы, применяемой
совместно с эмулируемым процессором. Можно, конечно, эмулировать функции
операционной системы (например, для DOS можно эмулировать функции
прерывания INT 21H), но подобная задача
значительно осложняет разработку эмулятора, и основное время фактически уходит
на написание операционной системы. Для преодоления этой сложности можно
написать эмулятор функций для работы с жёстким или гибким дисками (например,
для IBM PC можно написать эмулятор прерывания
BIOS INT 13H для работы с дисками на
низком уровне). После написания такого рода эмулятора можно создать образ диска
с уже установленной операционной системой и производить начальную загрузку
эмулятора с этого диска.
5.
Интерфейс с пользователем. Обычно, эмулятор процессора имеет некоторый
набор команд, позволяющий управлять им. К таким командам можно, например,
отнести команды управления выполнением команд (приостановить/возобновить
выполнение), команды загрузки и сохранения состояния эмулятора и т. д. Также
эмуляторы часто снабжаются средствами для редактирования и просмотра памяти
эмулятора.