Истории о вирусах

Структура и процесс загрузки СОМ-программы


Что же представляет собой СОМ-программа, как она загружается

в память и запускается?

Структура СОМ-программы предельно проста - она содержит только

код и данные программы, не имея даже заголовка. Размер СОМ-про-

граммы ограничен размером одного сегмента (64Кбайт).

И еще два понятия, которые часто будут встречаться:

Program Segment Prefix (PSP) - область памяти размером 256 (OlOOh)

байт, предшествующая программе при ее загрузке. PSP содержит дан-

ные командной строки и относящиеся к программе переменные.

Disk Transfer Address (DTA) - блок данных, содержащий адреса обмена

данными с файлом (чтение или запись). Область DTA для работы

с файлом используют многие функции, в том числе и не производящие



чтение или запись в файл. Примером может служить функция 4Eh

(найти первый файл по шаблону), которая будет неоднократно встре-

чаться в листингах программ.

Загрузка СОМ-программы в память и ее запуск происходят так:

1. Определяется сегментный адрес свободного участка памяти доста-

точного для размещения программы размера.

2. Создается и заполняется блок памяти для переменных среды.

3. Создается блок памяти для PSP и программы (сегментЮОООЬ - PSP;

сегментЮЮОЬ - программа). В поля PSP заносятся соответствую-

щие значения.

4. Устанавливается адрес DTA равным PSP:0080h.

5. Загружается СОМ-файл с адреса PSP:0100h.

6. Значение регистра АХ устанавливается в соответствии с парамет-

рами командной строки.

7. Регистры DS, ES и SS устанавливаются на сегмент PSP и програм-

мы (PSP.-OOOOh).

8. Регистр SP устанавливается на конец сегмента, после чего в стек за-

писывается OOOOh.

9. Происходит запуск программы с адреса PSP:0100h.

СОМ-программа всегда состоит из одного сегмента и запускается со

смещения OlOOh.



Содержание раздела