Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать

Структура imte.

таблица модулей IMTE

kernel32.dll

pModuleTableArray

user32.dll

gdi32.dll

my.exe

Начало таблицы модулей хранится в pModuleTableArray. Как только новый процесс или dll создаются, то kernel32 создаёт структуру IMTE, ищет свободный элемент в таблице модулей и записывает в него указатель на структуру IMTE. ОС сама следит за тем, чтобы не произошло заполнение таблицы модулей. Структура:

  • Указатель на базу данных модуля, расположенного в куче kernel32.dll в области выше 2 Гб. Благодаря указателю kernel32 может получать информацию о любом модуле не переключаясь в контекст памяти.

  • Указатель на полное имя файла из которого был создан модуль. Память под полное имя модуля выделяется.

  • Указатель на строку с именем модуля. Этот указатель указывает внутрь предыдущей структуры.

  • Число символов в полном имени файла.

  • Число символов только в имени файла.

Зачем нужны эти два предыдущих поля? Например, функция GetModuleHandle с помощью указателя просматривает структуры IMTE и для ускорения поиска сравнивает длины запрашиваемого модуля и модуля в очередной структуре IMTE, если длины не совпадают, то сравнивать имена смысла не имеет.

  • Число разделов в модуле. Например, раздел, содержащий данные, программный код и т.д.

  • Базовый адрес, по которому был запущен модуль.

  • Счётчик ссылок к модулю.

  • Счётчик числа ссылок в модуле, например, если какая-то программа была запущена на выполнение три раза, то для этой программы создаётся три объекта ядра процесса и одна база данных модуля.

Структура modref.

С помощью структуры MODREF создаётся список модулей для каждого процесса, что позволяет процессам не знать о модулях, загруженных другими процессами.

Структура MODREF создаётся для exe файла и для каждой dll, используемой файлом. Память для каждой MODREF выделяется из кучи kernel32.

Рассмотрим список MODREF для файла my.exe, который использует kernel32.dll и bar.dll.

PDB

my.exe

pModuleTableArray Таблица модулей

MODREF

0

4

6

kernel32.dll

0

индекс в IMTE

таблице

my.exe

4

модулей

bar.dll

6

Структура MODREF содержит недокументированные поля:

  1. Указатель на структуру PDB для обеспечения обратной связи.

  2. Индекс в таблице модулей, то есть индекс в глобальной таблице модулей.

  3. Указатель на следующую структуру MODREF.

Конец списка обозначается 00000000.

Все модуль-зависимые функции просматривают только структуры MODREF для конкретного процесса. Модуль-зависимые функции:

GetProcAddress(…) – получив идентификатор модуля и идентификатор функции (это её имя или порядковый номер экспорта) возвращает адрес точки входа этой функции.

GetModuleFileName(…) – по идентификатору модуля возвращает полный путь к exe или dll файлам.

GetModuleHandle(…) – по имени файла возвращает идентификатор этого модуля.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]