- •Методичесике указания к выполнению лабораторных работ по дисциплине
- •График проведения
- •Лабораторная работа № 1
- •Общие сведения
- •Задание
- •Содержание отчета
- •Что нужно знать для защиты отчета
- •Рекомендуемая литература
- •Лабораторная работа № 2
- •Общие сведения
- •Задание
- •Содержание отчета
- •Задание
- •Содержание отчета
- •Задание
- •Содержание отчета
- •Что нужно знать для защиты отчета
- •Рекомендуемая литература
- •Лабораторная работа № 5
- •Общие сведения
- •Задание
- •Варианты заданий
- •Содержание отчета
- •Задание
- •Варианты заданий
- •Содержание отчета
- •Что нужно знать для защиты отчета
- •Рекомендуемая литература
- •Лабораторная работа № 7
- •Общие сведения
- •Варианты заданий
- •Содержание отчета
- •Что нужно знать для защиты отчета
- •Рекомендуемая литература
Общие сведения
Необходимые термины
Загрузчик (англ. 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.