Семантический анализ структуры EXE файла и дисассемблер (с примерами и исходниками), вирусология

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Скачать Бесплатно!
Для того чтобы скачать эту работу.
1. Пожалуйста введите слова с картинки:

2. И нажмите на эту кнопку.
закрыть



флаги.

Состояние флагов после выполнения команды:

110706040200OFSFZFAFPFCF0rr?r0Применение:
Команда xor используется для выполнения операции логического исключающего ИЛИ двух операндов. Результат операции помещается в первый операнд. Эту операцию удобно использовать для инвертирования или сравнения определенных битов операндов.

 

 

 

 

 

 

  1. Структура и выполнение EXE-файла.

 

EXE-модуль, созданный компоновщиком, состоит из следующих двух частей: 1) заголовок - запись, содержащая информацию по управлению и настройке программы и 2) собственно загрузочный модуль.

В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шестнадцатеричными позициями. Для EXE-файла все несколько сложнее чем COM-файл. Общеизвестно что EXE файл отличается от COM файла тем что состоит из двух частей - заголовка, содержащего управляющую информацию для загрузки и самого загружаемого модуля - программы. Программа загружается в память, затем производится настройка адресов в соответствии с ТHА, потом из заголовка берутся значения SS:SP и CS:IP. В ES и DS заносится сегментный адрес PSP. Рассмотрим структуру заголовка EXE файла:

 

ТАБЛИЦА EXE ФАЙЛА

 

Смещение относительно начала(hex) Содержание Комментарий 00-01 4D5A - подпись компоновщика (признак EXE файла)

Компоновщик устанавливает этот код для идентификации правильного EXE-файла02-03 Длина последнего блока Число байтов в последнем блоке EXE-файла04-05 Длина файла в блоках по 512 байт Число 512 байтовых блоков EXE-файла, включая заголовок06-07 Количество элементов таблицы настройки адресов (Relocation table) Число настраиваемых элементов08-09 Длина заголовка в параграфах Число 16-тибайтовых блоков (параграфов) в заголовке, (необходимо для локализации начала выполняемого модуля, следующего после заголовка)0A-0B Минимальный объем памяти который надо выделить после конца программы ( в параграфах) Минимальное число параграфов, которые должны находится после загруженной программы0C-0D Максимальный объем памяти... Переключатель загрузки в младшие или старшие адреса. При компоновке программист должен решить, должна ли его программа загружаться для выполнения в младшие адреса памяти или в старшие. Обычным является загрузка в младшие адреса. Значение шест.0000 указывает на загрузку в старшие адреса, а шест. FFFF - в младшие. Иные значения определяют максимальное число параграфов, которые должны находиться после загруженной программы0E-0F Сегментный адрес стека относительно начала программы (SS) Относительный адрес сегмента стека в выполняемом модуле10-11 Значение SP при запуске Адрес, который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль12-13 Контрольная сумма - результат сложения без переноса всех слов файла Контрольная сумма - сумма всех слов в файле (без учета переполнений) используется для проверки потери данных14-15 Значение IP Относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль16-17 Значение CS Относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS18-19 Адрес первого элемента ТHА Смещение первого настраиваемого элемента в файле.1A-1B Номер сегмента перекрытия Номер оверлейного фрагмента: нуль обозначает, что заго ловок относится к резидентной части EXE-файлаНомер сегмента перекрытия Таблица настройки, содержащая переменное число настраиваемых элементов, соответствующее значению по смещению 06

 

Заголовок имеет минимальный размер 512 байтов и может быть больше, если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1C заголовка, состоит из двухбайтовых величин смещений и двухбайтовых сегментных значений.

Система строит префикс программного сегмента следом за резидентной частью COMMAND.COM (DOS), которая выполняет операцию загрузки. Затем COMMAND.COM выполняет следующие действия:

- Считывает форматированную часть заголовка в память.

- Вычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента.

- Считывает элементы таблицы настройки в рабочую область

и прибавляет значения каждого элемента таблицы к началу

сегмента (позиция OE).

- Устанавливает в регистрах SS и SP значения из заголовка

и прибавляет адрес начала сегмента.

- Устанавливает в регистрах DS и ES сегментный адрес

префикса программного сегмента.

- Устанавливает в регистре CS адрес PSP и прибавляет вели

чину смещения в заголовке (позиция 16) к регистру CS.

Если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (шест.100). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, т.е. начальный адрес программы.

После инициализации регистры CS и SS содержат правильные адреса, а регистр DS (и ES) должны быть установлены в программе для их собственных сегментов данных:

 

1. PUSH DS ;Занести адрес PSP в стек

2. SUB AX,AX ;Занести нулевое значение в стек

3. PUSH AX ; для обеспечения выхода из программы

4. MOV AX,datasegname ;Уста

s