Завантажувані модулі COM та EXE – файли

Програми, що призначені для виконання в середовищі операційної системи DOS називаються завантажуваними модулями та містяться у файлах, що мають розширення COM або EXE.

Файли COM – програми, що завантажуються безпосередньо. Для них не потрібно фактично ніякої підготовки для запуску їх після завантаження в ОЗП засобами DOS. Проводиться лише формування спеціальної сегмент-приставки, необхідної для всіх програм, що завантажуються ОС, і встановлення регістрів сегментів МП (їм присвоюються стандартні значення), після чого керування передається програмі, що завантажена в ОЗП. Файли типу СОМ завантажуються в ОЗП відразу ж після системної області (в нижню частину доступної пам’яті).

При завантаженні файлів ЕХЕ в ОС, необхідно провести спеціальну підготовку. Основа підготовки – переміщення, яке здійснюється завантажувачем командного процесора і заключається в налагодженні адрес в програмі в залежності від місця її завантаження в ОЗП. Інформація, необхідна для переміщення, зберігається в файлі типу ЕХЕ починаються дво-байтовою міткою (її значення 4D5AH).

Формат програм в файлах типу СОМ компактніший та простіший.

СОМ-файл – вміщує тільки машинні команди та дані, без заголовку, таблиці переадресації або відлагоджувальної інформації. Максимальний розмір файлу – 64 Кбайти.

Завантажувач працює з СОМ-файлом таким чином:

- відводить максимально можливий блок вільної пам’яті, будує префікс програмного сегменту (Program Segment Prefix - PSP) на початку блоку;

- читає СОМ-файл в пам’ять відразу за PSP і передає керування на перший байт програми.

Формат СОМ-файла скопіювали з формату виконуваних модулів ОС СР/М Digital Research для 8080, 880. тому вони незахищені. Можна присвоїти довільному файлу розширення СОМ і з командного рядка завантажити його в DOS.

ЕХЕ-файл – складається з трьох основних компонентів:

- заголовок файлу,

- таблиця переадресацій,

- власне код та дані програми.

Заголовок – містить кілька інформаційних блоків:

- двобайтну сигнатуру MZ (Марк Збиковськи);

- розміри заголовку, таблиці переадресації і файлу в цілому;

- початкові значення CS:IP і SS:SP в момент запуску програми;

- контрольна сума;

- деякі вказівки з розподілу пам’яті для завантажувача DOS.

Максимальний розмір ЕХЕ-файлу не обмежений. До його складу можна включити відлагоджувальну інформацію, дописавши цю інформацію в кінець файлу та залишивши без змін його розмір, вказаний в заголовку. Завантажувач DOS цю інформацію проігнорує.

Головний недолік ЕХЕ-файлів – вони не зберігають інформацію про окремі сегменти програми; коли компоновщик (linker) формує ЕХЕ-файл, він збирає всі заявлені у вихідному тексті сегменти в один величезний об’єм із спільною таблицею переадресації.

Системний завантажувач не в змозі визначити, яка частина програми є кодом, що виконується, яка – статичні дані (рядкові та числові константи), а яка – змінні дані. Тому завантажувач не має можливості відвести для зберігання кожного з цих компонентів окремі блоки пам’яті та незалежно маніпулювати сегментами.

Створюючи Windows, розробники Microsoft зрозуміли, що 640 Кбайтів реального режиму DOS сильно обмежує. Вихід у ретельній сегментації програм. Треба мати можливість залишати у пам’яті тільки ту частину, конкретної програми, яка забезпечує її подальше виконання та заміщувати, або виводити на диск фрагменти, які не використовуються у біжучий момент.

 

 

Було прийнято рішення ввести нову структуру файлів, що виконуються – нові ЕХЕ-файли. Був створений новий завантажувач для таких файлів під систему Windows. Під час роботи Windows він перехоплює звертання прикладних програм до функції DOS EXEC (функція 4Bh переривання 21h) і правильно завантажує як “нові”, так і “старі” ЕХЕ-файли.

Структуру файлу можна розглядати на декількох рівнях абстракції. На найвищому рівні дві частини:

- старий ЕХЕ-файл;

- новий ЕХЕ-файл.

“Стара” частина вміщує повний заголовок старого ЕХЕ-файла, таблицю переадресації і власне програму. Якщо новий ЕХЕ-файл чомусь буде запущений із командного рядка DOS, завантажувач DOS розпізнає заголовок старого ЕХЕ-файла та запустить програму – для WINDOWS – програми це просто повідомлення “This program requires Microsoft Windows” і повертається керування DOS.

Якщо новий ЕХЕ-файл запускається через модуль керування Program Manager або File Manager оболонки Windows, “стара” частина ЕХЕ-файла ігнорується.

“Нова” частина нового ЕХЕ-файла вміщує елементи, які розпадаються на три класи.

1. Заголовок та різні таблиці, які визначають розмір, розташування та характеристики всіх інших частин файла. Вони використовуються системним завантажувачем та “невидимі” для самої програми під час її виконання.

2. Сегменти коду та даних програми, кожна із своєю таблицею переадресації.

3. Ресурс – це статична порція даних. Наприклад: таблиці для побудови графічних елементів керування, символьні рядки для підказок та системи допомоги, курсори, іконки.

Кожний ресурс у файлі розпізнається за іменем та типом. Він завантажується у пам’ять системою за вимогою прикладної програми.

Версії OS/2 та різні розширювачі DOS також користуються форматом нового ЕХЕ-файлу.