
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры 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.
- •Словарь терминов.
Структура modref.
С помощью структуры MODREF создаётся список модулей для каждого процесса, что позволяет процессам не знать о модулях, загруженных другими процессами.
Структура MODREF создаётся для exe файла и для каждой dll, используемой файлом. Память для каждой MODREF выделяется из кучи kernel32.
Рассмотрим список MODREF для файла my.exe, который использует kernel32.dll и bar.dll.
PDB my.exe
pModuleTableArray Таблица модулей
MODREF
0
0
4
6
kernel32.dll
индекс в IMTE
т
аблице
м
4
my.exe
6
bar.dll
Структура MODREF содержит недокументированные поля:
Указатель на структуру PDB для обеспечения обратной связи.
Индекс в таблице модулей, то есть индекс в глобальной таблице модулей.
Указатель на следующую структуру MODREF.
Конец списка обозначается 00000000.
Все модуль-зависимые функции просматривают только структуры MODREF для конкретного процесса. Модуль-зависимые функции:
GetProcAddress(…) – получив идентификатор модуля и идентификатор функции (это её имя или порядковый номер экспорта) возвращает адрес точки входа этой функции.
GetModuleFileName(…) – по идентификатору модуля возвращает полный путь к exe или dll файлам.
GetModuleHandle(…) – по имени файла возвращает идентификатор этого модуля.
Файлы. Формат pe файла.
Фирма Microsoft разработала переносимый формат файла Portable Executable для использования во всех ОС. Эта же фирма разработала новый формат для объектных (obj) и для библиотечных (lib) файлов.
В ОС UNIX же использовался другой формат. (VAX VMS).
При разработке Windows NT в Microsoft перешли разработчики ОС UNIX. Они использовали привычные структуры. Форматы файлов, с которыми работали разработчики файлов назывались COFF (Common Object File Format).
РЕ файлы явились усовершенствованием формата COFF. Этот формат назывался переносимым, потому что все реализации Windows NT в различных системах (MIPS, Alpha, Intel и т.д.) используют один и тот же формат файла.
С вводом нового формата Microsoft использовала OMF (Object Module Format).
В результате разработчики объектных и библиотечных файлов вынуждены были поставлять различные версии своих файлов.
Особенности ре формата:
Исполняемый файл на диске и модуль, получаемый после загрузки практически идентичны. Загрузчик должен создать из файла процесс без усилий механизмом проецирования в память.
Использование относительного виртуального адреса (RVA – Relation Virtual Address). Многие поля в РЕ используют RVA. Смещение данного элемента по отношению к адресу, с которого начинается отображение файлов в память. Например, загрузчик Windows. Отобразим РЕ файл, начиная с адреса 400000h. Некоторая таблица начинается с адреса 40146h. Тогда RVA=1464h, то есть, чтобы перевести RVA в указатель нужно перевести RVA к базовому адресу.
Понятие раздела или секции. Все exe файлы Windows 95 используют плоскую модель памяти, однако в них используется условное деление на секции и разделы. Каждая секция содержит или код или данные.