- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры Windows.
- •Основные системные файлы Windows 95, nt, 2000.
- •Средства аппаратной поддержки управления памятью.
- •Сегментная организация памяти.
- •Страничная или сегментно-страничная организация памяти.
- •Механизмы управления памятью Windows.
- •Раздел 4. В него загружаются ядро Windows nt и драйверы устройств. Этот раздел полностью защищен и по чтению, и по записи. Регионы в адресном пространстве.
- •Системные переменные и операционные системы.
- •Передача физической памяти региону.
- •Механизм выделения страниц физической памяти.
- •Выделение физической памяти под программный код.
- •Атрибуты защиты страниц.
- •Стек потока.
- •Стек потока под Windows 95, 98.
- •Функции компилятора для контроля стека.
- •Кучи (Heaps).
- •Особенности кучи в Windows 95, Windows nt.
- •Структура арены.
- •Рассмотрим функции работы с кучей.
- •Удаление кучи.
- •Выделение блока памяти в определённой куче.
- •Освобождение блока кучи.
- •Дополнительные кучи Win32 процесса.
- •Создание дополнительных куч для эффективного управления памятью.
- •Локальный доступ. Создание дополнительных куч для локализации доступа.
- •Файлы проецируемые в память (фпвп).
- •Проецирование в память exe и dll файлов.
- •Совместное использование статических данных несколькими экземплярами exe и dll модулей.
- •Иерархия функций работы с памятью.
- •Объекты kernel32.Dll.
- •Процессы.
- •Структуры данных процесса.
- •Структура блока pdb.
- •Блок kprocess.
- •Блок переменных окружения (peb).
- •Переменная ядра, связанная с процессами.
- •Последовательность действий, выполняемых функцией CreateProcess.
- •Потоки.
- •Основные функции для работы с потоками.
- •Управляющие структуры ос для работы с потоками.
- •Описание структур управления потоками.
- •Управление потоками.
- •Лекция № 11
- •Функции Win32 связанные с планированием.
- •Учёт квантов времени.
- •Сценарий планирования.
- •Поток простоя.
- •Динамическое повышение приоритета потока.
- •Планирование потоков в системах с симметричной мультипроцессорной системой (smp).
- •Синхронизация.
- •Синхронизация потоков без использования объектов синхронизации.
- •Синхронизация потоков.
- •Критические секции.
- •Работа потока с несколькими критическими секциями.
- •Синхронизация объектов.
- •События со сбросом вручную.
- •События с автоматическим сбросом.
- •Модули.
- •Структура imte.
- •Структура modref.
- •Файлы. Формат pe файла.
- •Особенности ре формата:
- •Заголовок ре файла.
- •Основные секции исполняемого файла.
- •.Idata bfc0847d .Text jmp dword ptr [00040042 … call 00014408 (Вызов GetMessage) Прикладная программа
- •Импортирование ре файлов.
- •Эскпорт ре файлов.
- •Лекция № 15
- •Ресурсы ре файла.
- •Базовые поправки ре файла.
- •Файловые системы.
- •Загрузочный сектор.
- •Особенности ntfs.
- •Новые возможности ntfs.
- •Структура ntfs на диске.
- •Кластеры.
- •Главная таблица файлов.
- •Структура файловых ссылок.
- •Записи о файлах.
- •Индексация имён файлов.
- •Битовая карта.
- •Восстанавливаемость ntfs.
- •Журнал транзакций.
- •Записи контрольной точки.
- •Восстановление данных в ntfs.
- •Проход повтора.
- •Проход отмены.
- •Отказоустойчивость ntfs.
- •Словарь терминов.
Лекция № 15
Таблица адресов функций представляет собой массив двоичных слов, содержащих RVA одной из экспортируемых функций.
Номер экпорта каждой экспортируемой функции совпадает с её положением в массиве. Положение в массиве определяется так: номер экспорта – BASE. Отсчёт номеров экспорта начинается с числа, содержащегося в поле BASE. Номера экспортов могут иметь пропуски.
Пример.
BASE=10
10…13
10 11 12 13
RVA |
0 |
0 |
RVA |
Когда загрузчик Win32 выполняет вызов экспортируемой функции по номеру работа производится только с этой таблицей, а именно: по номеру определяется индекс в массиве, и по индексу в массиве определяется RVA соответствующей функции. Рассмотрим таблицы имён функции и номеров. Таблица имён функции представляет собой массив указателей на имена функций. Таблица номеров функции всегда содержит то же количество элементов, что и таблица имён. Таблица номеров представляет собой массив индексов для таблицы адресов функций.
Как производится обработка вызовов функций, экспортируемых по имени.
Загрузчик просматривает строки, на которые указывает таблица имён функций, для того чтобы найти имя требуемой функции. Если имя найдено, определяется индекс в таблице имён функций.
По найденному индексу из таблицы номеров функций извлекается индекс в таблице адресов функций. Из таблицы адресов извлекается RVA требуемой функции.
Т
аблица
адресов функций
Таблица имён функций
MyFunc1 MyFunc3
1 3
Ресурсы ре файла.
Организованы в виде иерархического дерева. Информация о ресурсах содержится в секции .rsrc. Организация ресурсов имеет следующую структуру.
ID: 2 меню
2
элемента
ID: 100
1
элемент
data
ID: 0
корень
3
элемента
ID: 3
диалог
2
элемента
data
ID: 5
3
элемента
пиктограммы
.
.
.
Для каждого типа ресурса содержатся подкаталоги первого уровня, или структура data, которая содержит указатель на конкретное описание ресурса.
Базовые поправки ре файла.
Компоновщик, создавая ехе файл предполагает, где в памяти будет создаваться РЕ файл в соответствии с предполагаемыми адресами ячеек в которых создаются данные, адреса переходов. Если файл загружен куда-либо в другое место в ВАП, то адреса, представляемые компоновщиком будут неверны.
Информация, хранящаяся в секции базовых поправок хранится в .reloc, позволяет загрузчику РЕ файла исправить адреса в загруженном модуле. Если же загрузчику удаётся загрузить файл по предполагаемому базовому адресу, то информация в секции .reloc игнорируется. Базовые поправки представляют собой перечень тех мест в программе, в котором нужно добавить требуемую величину дельта отображения.
=реальный адрес – базовый адрес.
Таблица базовых Данные Файл, загружать
поправок отображения 600000
смещение 0007
смещение 0024
смещение 0086
404000
406234
403018
604000
606234
603018
+
+
+
Реально в таблице базовых поправок формируются блоки различной длины, каждый блок включает базовые поправки для одной 4 Кб страницы. Каждый блок начинается со стартового RVA для этой страницы. Смещение каждой поправки добавляется к этой величине.
RVA
относительный
RVA
?Зачем это надо? Для экономии места.
