
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры 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.
- •Словарь терминов.
Заголовок ре файла.
.reloc
.idata
.edata
.data
.text
таблица
секций
………………………………..
РЕ\0\0
DOS
“MZ – заголовок”
База данных модуля
смещение
0
Заголовок – это набор полей, который определяет как будет выглядеть остальная часть файла.
Несколько сотен байт РЕ файлов заняты под заглушку (‘This program must be run under Windows’). В DOS MZ заголовке находится указатель RVA на заголовок РЕ файла. База данных модуля начинается с сигнатуры, спомощью которой определяется тип файла.
РЕ - исполняемый Win32
NE - исполняемый Win16
LE - драйверы
LX - исполняемый OS/2
В базе данных модуля содержатся следующие поля:
Тип процессора для которого предназначен файл.
Время, когда файл был создан компоновщиком (ехе) или компилятором (obj). В этом поле указывается количество секунд, прошедших с 16:00 31 декабря 1969 года.
Версия компоновщика, который создал данный файл в формате minor/major, то есть х.х.
Лекция № 14 (27.04.02)
Суммарный размер программных секций, округлённых к верхней границе. Обычно это одна секция. Верхняя граница составляет 4 Кб.
Общий размер всех секций, состоящий из инициализированных данных, то есть глобальные переменные и константы, начальные значения которых определены.
Адрес, с которого начинается выполнение программного кода.
R VA, с которого начинаются программные секции файла. RVA обычно равен для ехе файлов 1000h.
text
RVA
RVA, с которого начинается секция данных.
Адрес, с которого файл должен отображаться в виртуальное адресное пространство. Для Windows 95,98 это 400000h, для Windows NT/2000 – это 010000h.
Самая старая версия ОС, которая может использовать данный файл в формате х.х.
Размер заголовка РЕ файла и таблица секций.
Объём виртуальной памяти, которая резервируется под начальный стек потока.
Количество памяти, которое изначально выделяется под стек потока.
Объём виртуальной памяти, резервируемый под кучу процесса по умолчанию.
Объём физической памяти, который выделяется под кучу и другие поля.
После заголовка идёт таблица секций. Она содержит информацию о каждой секции файла. Записи в таблице секций упорядочиваются по стартовому адресу. Каждая запись в таблице секций состоит из следующих полей:
8 байтовое имя секции в стандарте ASCII. Имена секций присваиваются обычно компилятором. Мы можем и сами создать секцию (надо уметь использовать ASM).
Пример (MS Visual C).
pragma code_seg <имя>
pragma data_seg <имя>
Если имя секции занимает 8 байт, то отсутствует завершающий нуль.
RVA, когда загрузчик должен отобразить секцию.
Размер секции, выровненный на ближайшую верхнюю границу размера файла. Файл делится на области, кратные 512 байт.
Основные секции исполняемого файла.
text.
В ней обычно собран весь программный код общего назначения. BC++ помещает весь программный код в секцию CODE. Особенностью данной секции в РЕ файле является то, что для вызова функций из других модулей формируется дополнительный программный код. Рассмотрим эту особенность на следующем примере:
В РЕ файле вызывается функция GetMessage(…) из модуля user32.dll (в ASM это функция call).