Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод.Указания к Лаб.Раб по АВС.doc
Скачиваний:
10
Добавлен:
05.03.2016
Размер:
2.2 Mб
Скачать

Общие сведения

Необходимые термины

Загрузчик (англ. loader) — программа, отвечающая за загрузку исполняемых файлов и запуск соответствующих новых процессов. Обычно является частью операционной системы, но может быть и самостоятельной программой, — к примеру, позволяющей операционной системе запускать программы, скомпилированные для других операционных систем.

Процесс — абстрактное понятие, относящееся к программе. Часто процессом называют программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, счетчик команд, состояние, открытые файлы, дочерние процессы и т. д.

Настраиваемые элементы – поля в заголовке .exe файла, которые должны содержать полные адреса точек в программе, значения которых окончательно могут быть сформированы только после загрузки программы в память, так как до ее загруз ки известны только смещения внутри сегментов, но не известны сегментные адреса, то есть адреса начала расположения сегментов в памяти.

Диспетчер операционной системы — часть ОС, отвечающая за распределение ресурсов компьютера между процессами.

Фатальная ошибка - Kernel panic (англ. букв.: паника ядра) — сообщение об ошибке ядра операционной системы, которое выдается после такой ошибки, которая приводит операционную систему в неопределённое состояние и не существует никакой возможности дальнейшей контролируемой работы ядра или операционной системы.

Таблица открытых файлов – структура данных, создаваемая операционной системой в оперативной памяти компьютера. В этой таблице хранится необходимая операционной системе информация об открытых файлах.

Исполняемые файлы, как и любые другие файлы, имеют свою четко определенную внутреннюю структуру. При создании файлов типа .exe компоновщик формирует в начальных адресах файла заголовок, длиною 512 байтов, используемый в дальнейшем, программой загрузчиком (в нашей ситуации – это загрузчик, входящий в состав DOS).

При загрузке исполняемого файла в оперативную память компьютера, загрузчик создает в памяти впереди программы, так называемый, Префикс Программного Сегмента (Program Segment Prefix, PSP) занимающий 256 байт.

Эти две структуры (заголовок .exe фала и PSP) содержат системную информацию, используемую как для размещения программы в памяти и передачи ей управления, так и для корректного ее завершения. Под передачей управления программе понимают настройку соответствующих регистров центрального процессора на адреса исполняемой программы. Выполнение программы начинается, как только на регистровой паре CS:IP появляется адрес точки входа в программу. Под корректным завершением программы понимают выход из программы с восстановлением адресов некоторых важных системных прерываний, «перехват» которых могла выполнять наша программа. Перехватом прерывания называют загрузку вектора прерывания адресом собственной программы обработчика прерывания.

Таблица 2.1 – Структура заголовка .exe файла

Смещение

от начала

заголовка .exe файла

Содержимое поля

00h

4Dh 5Ah -'MZ' – ключ, идентифицирующий EXE файл (признак .exe файла). MZ - это инициалы Марка Збиковски (Mark Zbikowski) — одного из создателей операционной системы MS-DOS

02h

число байтов в последнем блоке EXE файла (размера блока 512 байт)

04h

число блоков (включая заголовок) EXE файла (размер программы в блоках)

06h

число настраиваемых элементов

08h

число параграфов в заголовке (20h, т.е. 32 x 16 = 512 необходимо для локализации начала выполняемого модуля, следующего после заголовка)

0Ah

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

0Ch

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

0Eh

начальное значение для загрузки регистра SS

10h

адрес, который загрузчик должен поместить в регистр SP (размер стека) перед передачей управления в выполняемый модуль

12h

контрольная сумма (сумма всех слов в файле) без учета переполнений. Используется для проверки потери данных

Продолжение таблицы 2.1

14h

относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль

16h

смещение от начала программы для установки регистра CS

18h

смещение от начал .exe файла к таблице настраиваемых элементов

1Ah

номер оверлейного фрагмента, в многомодульных программах: 0 - означает, что заголовок принадлежит основному модулю программы

1Ch

таблица настройки, содержащая переменное число настраиваемых элементов, соответствующих значению по смещению 06h.

Таблица 2.2 – Структура PSP (префикса программного

сегмента )

смещение

ширина поля в байтах

содержимое поля

0h

2

int 20h (CD20)

двоичный код команды

int20h - завершение работы программ

2h

2

нижняя граница доступной памяти в параграфах

4h

1

резерв

5h

5

CALL - дальний вызов диспетчера MS-DOS

Ah

4

адрес обработчика завершения int 20h ( Terminate Address )

Еh

4

адрес обработчика int 23h реакция на Ctrl-Break

12h

4

адрес обработчика int 24h фатальной ошибки

16h

2

сегмент PSP программы, запустившей данную программу (программы - родителя)

18h

20

таблица открытых файлов. Если в этом поле записаны байты 0FFh, то таблица открытых файлов не используется

2Сh

2

сегментный адрес блока памяти, содержащий переменные среды ( ASCIIZ строки )

2Еh

4

адрес стека программы SS:SP

32h

2

максимальное количество открытых файлов

34h

4

адрес таблицы открытых файлов

38h

24

резерв

50h

3

диспетчер функций MS-DOS (int 21h & RETF)

53h

9

резерв

5Сh

16

если первый аргумент командной строки содержит правильное имя файла, поле 5Сh имеет формат стандартного блока FCB1*

6Сh

20

FCB2* - для второго аргумента командной cтроки

Продолжение таблицы 2.2

80h-FFh

DTA ( Data Transfer Area ) буфер передачи данных.Байт по смещению 0 в области DTA – число нажатий на клавиши после команды, начиная с первого байта, сами, вводимые символы (неформатированная область)

* –– FCB1и FCB2 – блоки управления файлом, то есть области, имеющие определенные структуры и содержащие необходимую информацию для управления (открытия, закрытия и др.) файлом.

Если поле по смещению 80h содержит 000Dh – это говорит о том, что команда вызывалась без операндов – 00h, а 0Dh - код Enter.