Структура файлів .EXE та їх завантаження
Химия

Структура файлів .EXE та їх завантаження


Завантажити реферат: Структура файлів .EXE та їх завантаження

Зміст реферату

1. Склад файлу EXE

2. Структура програмного сегмента

Література:

1. Склад файлу EXE

Файл EXE, який будує компонувальник, складається з двох частин:

— керуюча інформація для завантажувача.

— Власне завантажувальний модуль.

Інформація для завантажувача, описана нижче, розташована на початку файлу та утворює так званий заголовок. Відразу за ним слідує тіло завантажувального модуля. Тіло завантажувального модуля починається на межі блоку і являє собою копію образу пам’яті задачі, яку побудував ком поновщик.

Стандартна частина заголовка має такий формат:

Зміщення Вміст

00-01 4D5A — «підпис» компонувальника, що вказує, що файл є файлом EXE.

02-03 Довжина образу задачі за модулем 512 (тобто кількість корисних байт в останньому блоці).

(Компоновщики версій до 1.10 поміщали це поле 04; якщо воно має таке значення, його рекомендується ігнорувати).

04-05 Довжина файлу у блоках.

06-07 Число елементів таблиці настроювання адрес.

08-09 Довжина заголовка в 16 байтних параграфах.

Використовується для визначення початку тіла завантажувального модуля.

0A-0B Мінімальний об’єм пам’яті, яку потрібно виділити після кінця завдання.

(У 16-ти байтних параграфах).

0C-0D Максимальний обсяг пам’яті, яку потрібно виділити після кінця завдання.

(У 16-ти байтних параграфах).

0E-0F Сегментна адреса початку стекового сегмента щодо початку образу завдання.

10-11 Значення SP під час входу до завдання.

12-13 Контрольна сума – нуль мінус результат складання без перенесення всіх слів файлу.

14-15 Значення IP (лічильника команд) під час входу до завдання.

16-17 Сегментна адреса початку кодового сегмента щодо початку образу задачі.

18-19 Адреса першого елемента таблиці налаштування адрес щодо початку файлу.

1A-1B Номер сегмента перекриттів.

(0 для кореневого сегмента програми).

Далі слідує таблиця налаштування адрес. Таблиця складається з елементів, число яких записано байтах 06-07. Елемент таблиці налаштування складається з двох полів: 2-байтного зміщення і 2-байтного сегмента, і вказує слова в завантажувальному модулі, що містить адресу, який повинен бути налаштований на місце пам’яті, в яке завантажується завдання.

Налаштування виконується таким чином:

1. В області пам’яті після резидентної частини програми, що виконує завантаження, будується Префікс Програмного сегмента.

2. Стандартна частина заголовка зчитується на згадку.

3. Визначаться довжина тіла завантажувального модуля (різниця довжини файлу 04-07 та довжини заголовка 08-09 плюс число байт в останньому блоці 02-03). Залежно від ознаки, що вказує завантажувати завдання в кінець пам’яті або початок, визначається сегментний адресу для завантаження.

Цей сегмент називається початковим сегментом.

4. Завантажувальний модуль зчитується у початковий сегмент.

5. Таблиця налаштування порціями зчитується до робочої пам’яті.

6. Для кожного елемента таблиці налаштування до поля сегмента додається сегментна адреса початкового сегмента. В результаті елемент таблиці вказує на потрібне слово у пам’яті; до цього слова додається сегментна адреса початкового сегмента.

7. Коли таблиця налаштування адрес оброблена, регістрам SS і SP надаються значення, зазначені в заголовку, до SS додається сегментна адреса початкового сегмента. В ES і DS надсилається сегментна адреса початку Префікса Програмного сегмента. Управління передається завантаженому завданню за адресою, вказаною в заголовку (байти 14-17).

2.Структура програмного сегмента

При зверненні до нерезидентної команди або виклик програми операцією Exec, DOS визначає мінімальну адресу, починаючи з якої може бути завантажена відповідна програма. Ця область називається програмним сегментом.

За усуненням 0000 у програмному сегменті DOS формує Префікс Програмного сегмента (PSP). Сама програма завантажується зі зміщення 0100.

Програма завершується переходом за адресою 0000 в програмному сегменті, виконавши INT 20, виконавши INT 21 з AH=0 або AH=4C, або звернувши до підпрограми за адресою 0050 в програмному сегменті з AH=0 або AH=4C.

Примітка: при завершенні інакше, ніж операцією 4C, програма повинна заслати в CS адресу початку свого програмного сегмента.

Усі чотири способи повертають керування в резидентну частину COMMAND.COM (при цьому операція 4C передає код завершення). Усі чотири способи призводять до продовження виконання програми, яка звернулася до операції Exec (4B). При цьому вектори переривань 22, 23 і 24 (завершення, Ctrl-Break, фатальна помилка обміну) відновлюються з префіксу Програмного сегмента поновлюваного завдання. Потім керування передається за адресою завершення. Якщо програма повертається до COMMAND.COM, то керування передається в нерезидентну частину. Якщо це відбувається під час виконання командного файлу, воно продовжується, інакше COMMAND ви дає на термінал запрошення і чекає на введення наступної команди.

Коли завантажена програма отримує управління, мають місце такі умови:

Для всіх програм:

— У Префіксі Програмного сегмента зі зміщення 2C передається адреса середовища. Середовище являє собою послідовність рядків ASCIIZ, виду параметр = значення

Загальна довжина рядків середовища <= 32K байт; середовище починається з межі параграфа. Після останнього рядка слідує нульовий байт. Середовище, що передається задачі від COMMAND, містить як мінімум параметр COMSPEC= (значення цього параметра - повне ім'я файлу, що містить COMMAND.COM). Вона також містить значення, встановлені командами PATH, PROMPT та SET (Див. розділ 10). Середовище, що передається, є копією середовища батьківського процесу. Якщо завдання залишається резидентом, то наступні команди PATH, PROMPT та SET не впливатимуть на її середовище.

— За усуненням 0050 у Префіксі Програмного сегмента міститься програма звернення до операцій DOS. Таким чином, занісши в AH номер операції, програма може викликати процедури (LCALL) на адресу PSP + 50, а не звертатися до переривання 21.

— Адреса буфера DTA встановлена ​​на PSP +80.

— Блоки керування файлами, розташовані за зсувами 5C і 6C у Префіксі Програмного сегмента, заповнюються відповідно до параметрів командного рядка. При цьому якщо відповідний параметр включає ім’я каталогу, FCB заноситься тільки код пристрою, ім’я файлу формується неправильно.

— Неформатна частина, що починається зі зміщення 81, містить символи командного рядка після імені команди, включаючи всі пробіли і чи розділіть. За усунення 80 вміщена довжина цього рядка. Якщо командний рядок включає параметри перепризначення (на них вказують символи > і <) вони не потрапляють сюди, оскільки перепризначення є прозорим для програм.

— Слово зі зміщення 6 містить число байт у цьому сегменті.

— Реєстр AX вказує, чи правильно задані імена пристроїв у параметрах:

AL = FF — ім’я пристрою першого параметра задано неправильно, інакше AL = 00;

AH = FF — ім’я пристрою для першого параметра неправильне, інакше AH = 00.

Для програм .EXE:

— DS та ES вказують на початок Префіксу Програмного сегменту.

— Регістри CS, IP, SS та SP отримують значення, вказані компонувальником.

Для програм .COM:

— Усі чотири сегментні регістри вказують на Префікс Програмного сегмента.

– Програмі виділяється вся вільна пам’ять. Якщо програма запускає інші програми операцією Exec, вона повинна звільнити для неї частину пам’яті операцією Setblock (4A)

— Лічильник команд IP отримує значення 0100H.

— реєстр SP вказує на кінець програмного сегмента. Довжина сегмента в комірці Префікса 6 зменшується на 0100H, щоб звільнити простір для стека такого розміру.

— На вершину стека збожеволіє нульове слово Префікс Програмного сегмента має наступний формат (усі числа
шістнадцяткові):

     ---------------------------------------------------------------
     |    0  |   1  |   2   |   3   |   4   |   5   |   6   |  7    |
--------------------------------------------------------------- | INT | Top of | Re- | Long call to DOS |
| 20H | memory |served | OP # bytes |
| | | | CODE in segment |
--------------------------------------------------------------- | 8 | 9 | A | B | C | D | E | F |
--------------------------------------------------------------- | cont.segment | Terminate | Terminate |Ctrl-break exit|
| of long call | address IP | address CS |address IP |
--------------------------------------------------------------- | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
--------------------------------------------------------------- |Ctrl-break exit Critical error exit address | Reserved |
|address CS | IP CS | |
--------------------------------------------------------------- | 18 | 19 | 2A | 2B | 2C | 2D | 2E .... 4F |
--------------------------------------------------------------- | R e s e r v e d |Segment address| Reserved |
| |of environment | |
--------------------------------------------------------------- | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
--------------------------------------------------------------- | DOS call | R e s e r v e d |
--------------------------------------------------------------- | 58 | 59 | 5A | 5B | 5C | 5D | 5E | 5F |
--------------------------------------------------------------- | R e s e r v e d | Unopened Standart FCB1 |
--------------------------------------------------------------- | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
--------------------------------------------------------------- | Unopened Standart FCB1 (cont.) |
--------------------------------------------------------------- | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F |
--------------------------------------------------------------- | F C B 1 (cont.) | Unopened Standart FCB2 |
--------------------------------------------------------------- | 70 to 7F |
--------------------------------------------------------------- | Unopened Standart FCB2 (cont.) |
--------------------------------------------------------------- | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
--------------------------------------------------------------- | Parm | Command parameters starting with leading blanks |
| length| |
--------------------------------------------------------------- | F8 | F9 | FA | FB | FC | FD | FE | FF |
--------------------------------------------------------------- | C o m m a n d p a r a m e t e r s |
----------------------------------------------------------------

Примітки:

1. Кордон пам’яті – номер першого вільного параграфа; напр. 1000 відповідає 64К.
2. Слово зі зміщення містить 6 число байт в даному сегменті.
3. Слово зсуву 2C містить сегментну адресу середовища.
4. Програма не повинна змінювати частину PSP від ​​00 до 5C.

Література:

1. Джордан Довідник програміста персональних комп’ютерів

2. Нортон Архітектура персональних комп’ютерів фірми IBM

3. Бек Введення у системне програмування

© Реферат плюс



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *