Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_lab_ps_2_SPO_ch2_lab_rab (1).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
341.5 Кб
Скачать

КАФЕДРА

«СПЕЦІАЛІЗОВАНІ КОМП'ЮТЕРНІ СИСТЕМИ»

МЕТОДИЧНІ ВКАЗІВКИ

до виконання лабораторних робіт з курсу

«Системне програмне забезпечення»

частина 2

(для студентів спеціальності 7.091503

“Спеціалізовані комп’ютерні системи”)

ЗАТВЕРДЖЕНО

на засіданні кафедри СКС

Протокол № 08 від 03.03.2006р.

РЕКОМЕНДОВАНО

на засіданні метод ради ДонДТУ

Протокол № 04 від 17.03.2006р.

Алчевськ

ДонДТУ

2006

УДК 004.42

Методичні вказівки до виконання лабораторних робіт з курсу «Системне програмне забезпечення» Частина 2 (для студентів спеціальності 7.091503 «Спеціалізовані комп'ютерні системи») / Укл.: Є.В. Мочалін – Алчевськ: ДонДТУ, 2006. – 62 с.

Розглянуто особливості створення та функціонування багатопоточних програм, а також засоби синхронізації потоків у середовищі Win32.

Укладач Є.В. Мочалін, доц.

Відповідальний редактор С.В. Гонтовий, доц.

Відповідальний за випуск О.М. Русанова

ЗМІСТ

1 Дослідження структури виконуваного файлу РЕ - формату 4

2 Планування та створення потоків 13

в середовищі Win32 13

3 Синхронізація потоків у 18

користувальницькому режимі 18

4 Синхронізація потоків у режимі ядра 22

Перелік посилань 29

Дотаток Б 34

Дотаток В 43

Дотаток Г 53

1 Дослідження структури виконуваного файлу ре - формату

1.1 Мета роботи

  • Вивчення правил завантаження виконуваних файлів в операційних системах WINDOWS.

  • Вивчення основ створення адресного простору процесів в середовищі WINDOWS.

  • Вивчення основ використання імпорту та експорту коду та даних вWin32.

1.2 Основні відомості

Для 32-розрядних програм фірма Microsoft розробила спеціальний формат виконуваного файла. Він отримав назву переносний формат виконуваного файла (PE – Portable Executable). Необхідно відмітити, що ідеї, які закладені в РЕ – формат для Win32 не є новими. Основи цього формату були закладені в операційній системі UNIX, де аналогічний формат називався COFF- формат (Common Object File Format – стандартний формат об’єктного файла). Формат виконуваного файла в 32-розрядних операційних системах названо форматом, що переноситься через прагнення фірми Microsoft створити єдиний формат виконуваного файла для реалізації ОС WINDOWS NT на різних апаратних платформах (що, звісно, не означає сумісності на рівні машинних команд).

Загальна структура РЕ – формату представлена на рисунку 1.1.

0000:0000h

MZ

This program requires

Microsoft Windows

0000:0018h

40h

0 000:003Ch

xxxx

0000:xxxxh

PE/0/0

Основний РЕ – заголовок (20 байт)

Додатковий РЕ – заголовок

(змінна довжина)

Таблиця секцій

Секція коду

Секція ініціалізованих даних

Секція неініціалізованих даних

Секція експортуємих функцій

Секція імпортуємих функцій

Інші секції

Рисунок 1.1 – Загальна структура файла РЕ – формату

До основних особливостей цього формату відносяться:

  • простота завантаження файлу РЕ – формату. Якщо порівнювати цей процес з завантаженням файлу NE формату (WINDOWS 3.x), то для РЕ – виконуваного файлу він значно простіше;

  • підтримка суцільної моделі пам’яті. Конструкція РЕ-файла максимально спрощена с точки зору завантаження до пам’яті. Фактично, він становить собою зліпок ділянки оперативної пам’яті;

  • не потрібно настроювати сегменти команд або даних, так як їх немає в тому вигляді, як це було в 16-розрядному середовищі;

  • розташування багатьох полів в РЕ – файлі задається за допомогою відносного зсуву від початку РЕ – файла – Відносної Адреси Поля (ВАП). Сам РЕ – файл розташовується за Базовою Адресою Пам’яті (БАП) – фізичною адресою пам’яті, з якої починається завантажений у пам’ять модуль.

Інформація в РЕ-файлі є, в основному, високорівневою та використовується системою або програмами, щоб з’ясувати правила спілкування з конкретним виконуваним файлом.

Розглянемо основні складові частини в структурі файла РЕ – формату відповідно до рис. 1.1.

  1. Программа-заглушка MS-DOS.

Основні міркування, з яких на початку РЕ – файла знаходиться програма-заглушка MS-DOS – при запуску в середовищі MS-DOS видати повідомлення типу This program requires Microsoft Windows. Сама програма-заглушка виконана як повноцінний MZ-файл для MS-DOS. Найбільший інтерес уявляє 4-байтове поле зі зсувом 3Сh. В ньому міститься зсув, що вказує на початок РЕ-файла.

б) Заголовок РЕ – файла.

Заголовок РЕ-файла починається 4-байтовою сигнатурою 50 45 00 00h, що відповідає рядку “РЕ” з наступними двома байтами нулів.

Заголовок РЕ – файла можно розбити на такі частини:

  • сигнатура РЕ – файла;

  • основний заголовок РЕ – файла (PE – header);

в) Додатковий заголовок РЕ-файла (PE – optional header).

Формат основного заголовку РЕ – файла представлено в таблиці 1.1. Він містить саму загальну інформацію про РЕ – файл.

Таблиця 1.1 – Структура основного заголовку РЕ – файла

Зсув

Довжина,

байт

Призначення

00h

2

Тип комп’ютера, для якого створювалася програма.

Деякі можливі значення:

0000h – невідомий тип комп’ютерної платформи;

014Ch – Intel i80x86;

0160h, 0162h, 166, 168 – MIPS;

0184h – DEC Alpha AXP;

01F0h – Power PC;

0268h – Motorola 68000.

02h

2

Кількість секцій в РЕ – файлі

04h

4

Час створення файлу. Відлік часу проводиться в секундах, що минули з 16:00 31.12.1969.

08h

4

0

0Ch

4

0

10h

2

Розмір додаткового заголовку РЕ-файла.

12h

2

Інформаційні прапори:

0001h – інформація про переміщення видалена з файла;

0002h – файл уявляє собою виконуване відображення, тобто не має нерозв’язаних зовнішніх посилань;

0004h – інформація про номери рядків видалена з файла;

0008h – розташування байт в машинному слові зворотне, тобто відповідає принципу “молодший байт за молодшою адресою”;

0100h – розмір машинного слова 32 біта;

0200h – відлагоджувальна інформація видалена з виконуваного файла в файл .dbg;

1000h – системний файл;

2000h – dll-бібліотека;

в) Додатковий заголовок.

За основним заголовком РЕ – файла іде додатковий заголовок. В таблиці 1.2 представлені розташування і значення полів, які представляють найбільший інтерес. Всі зсуви відраховуються від початку додаткового заголовка.

Таблиця 1.2 – Структура додаткового заголовку РЕ – файла

Зсув

Довжина,

байт

Призначення

+00h

2

Сигнатура, що визначає стан РЕ – файла. Можливі значення:

0107h – відображення постійного запам’ятовуючого пристрою;

010Вh – звичайний виконуваний файл.

+02h

2

Версія компанувальника, який створив виконуваний файл.

+04h

4

Розмір секції коду в байтах.

+08h

4

Розмір секції ініціалізованих даних.

+0Ch

4

Розмір секції неініціалізованих даних.

+10h

4

Адреса (ВАП), з якої починається виконання модуля. Вона знаходиться в секції коду.

+14h

4

ВАП, з якої починаються програмні секції РЕ – файла. Якщо файл був створений компанувальником Mikrosoft, то програмна секція починається з адреси 1000h. Компанувальник Borland (Inprise) розміщує секцію коду з адреси 10000h.

+18h

4

ВАП, з якої починаються секції даних РЕ – файла. Звичайно вони розташовані за секціями коду. Усі об’єкти РЕ – файла, в тому числі секції коду і даних, вирівнюються на кратну границю: компанувальник Microsoft вирівнює об’єкти на границю кратну 4 Кбайт, компанувальник Borland – на границю 64 Кбайт.

Продовження таблиці 1.2

Зсув

Довжина,

байт

Призначення

+1Ch

4

Адреса оперативної пам’яті, куди передбачається завантаження файла. Цю адресу формує компанувальник. Якщо файл дійсно завантажується за цією адресою, то завантажувальнику не потрібно робити більше ніяких настроювань, тому процес завантаження відбувається швидше. Якщо завантажувальник не може розмістити файл за вказаною адресою, то він вимушений виконувати настроювання адрес.

+20h

4

Значення вирівнювання для секції. Кожна секція в РЕ – файлі вирівнюється на границю, чисельне значення якої кратно величині, що вказана в даному полі (див. Також описання поля 0018h).

+24h

4

Значення кратності, відповідно до якого вирівнюються дані в РЕ – файлі.

+28h

4

Номер самої старої версії (модифікації) операційної системи, в середовищі якої може працювати даний файл (звичайно 1.0).

+2Сh

4

Визначається користувачем за допомогою ключа компанувальника /VERSION:n.m (для link.exe (MASM)), або /Vn.m (для tlink32.exe (TASM)). Значення n и m заносяться до двох слів цього поля.

+30Ch

4

Номери самої старої версії (і модифікації) операційної системи WINDOWS NT, в середовищі якої може працювати даний файл (звичайно 4.0).

+34h

4

0

+38h

4

Розмір РЕ – файла, вирівняний на ближню границю секції.

+3Сh

4

Загальний розмір усіх заголовків в РЕ – файлі, включаючи заголовок MS-DOS, РЕ – заголовок, Додатковий РЕ – заголовок та заголовки РЕ – секцій.

Продовження таблиці 1.2

+40h

4

Для виконуваних файлів це поле дорівнює 0. Для файлів dll - бібліотек поле містить контрольний підсумок (crc).

+44h

2

Тип користувальницького інтерфейсу, що використовується РЕ – файлом:

0000h – невідома підсистема;

0001h – підсистема не потрібна (драйвер пристрою);

0002h – Windows GUI;

0003h – консольна програма Windows;

0005h – OS/2;

0007h – Posix.

+46h

2

0

+48h

4

Потрібний об’єм пам’яті для стека.

+4Сh

4

Виділювана кількість пам’яті для стека.

+50h

4

Потрібний об’єм пам’яті для локальної кучі.

+54h

4

Виділювана кількість пам’яті для локальної кучі.

+58h

4

0

+5Ch

4

Кількість елементів масиву структур, що описують місцерозташування і розмір деяких значимих таблиць і областей виконуваного файла. Значення звичайно дорівнює 10h.

+60h

10h*2*4

Масив структур, кожна з яких складається з двох полів (розмірність кожного поля dword):

ВАП розташування даних в РЕ – файлі;

розмір даних.

Реальне наповнення мають перші 12 структур в даному масиві. Вони описують розташування таких даних в РЕ – файлі:

0 – таблиця експортуємих функцій;

1 – таблиця імпортуємих функцій;

2 – таблиця ресурсів;

3 – таблиця виключень;

4 – таблиця безпечності;

5 – таблиця настроювання;

та ін.

За масивом структур, якими закінчується заголовок РЕ-файла, починається таблиця секцій.

г) Таблиця секцій.

Якщо не враховувати програми-заглушки для MS-DOS і необов’язкової області відлагоджувальної інформації, то РЕ – файл складається з двох великих частин – заголовка та області загальних об’єктів, які звуться секціями. Інформація про усі секції РЕ – файла зберігається в таблиці секцій. Таблиця секцій розташовується відразу після заголовка РЕ – файла. Кількість секцій визначається за значенням поля на початку основного заголовка +2h.

Таблиця секцій складається з структур розміром по 40 байт кожна. Структури детально описують відповідні секції. Поля, які складають структуру таблиці секцій, представлені в таблиці 1.3.

Таблиця 1.3 – Зміст структури в таблиці секцій

Зсув

Довжина,

байт

Призначення

+00h

8

Ім’я секції (якщо ім’я менше 8 байт, то воно додано справа нуями).

+08h

4

Розмір секції (потрібна кількість пам’яті).

+0Сh

4

ВАП, за якою завантажувальник повинен завантажити секцію.

+10h

4

Розмір секції, вирівняний на найближчу (в більший бік) границю, у відповідності з розміром вирівнювання (см. Поля +20h и +24h в табл. 1.2).

+14h

4

ВАП в РЕ – файлі, де знаходяться дані для секції. Це поле сумісно з полем +0Сh необхідне для того, щоб дозволити програмісту самому керувати завантаженням РЕ – файла.

+18h

12

0

+24h

4

Флаги, які характеризують атрибути секції.

Слідом за заголовком розміщена основна частина РЕ-файла – розділ секцій. Тут ми не будемо приводити докладний опис секцій. Цю інформацію можна отримати, наприклад, у [1].