![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
таблица модулей IMTE
kernel32.dll |
pModuleTableArray
user32.dll |
gdi32.dll |
my.exe |
Начало таблицы модулей хранится в pModuleTableArray. Как только новый процесс или dll создаются, то kernel32 создаёт структуру IMTE, ищет свободный элемент в таблице модулей и записывает в него указатель на структуру IMTE. ОС сама следит за тем, чтобы не произошло заполнение таблицы модулей. Структура:
· Указатель на базу данных модуля, расположенного в куче kernel32.dll в области выше 2 Гб. Благодаря указателю kernel32 может получать информацию о любом модуле не переключаясь в контекст памяти.
· Указатель на полное имя файла из которого был создан модуль. Память под полное имя модуля выделяется.
· Указатель на строку с именем модуля. Этот указатель указывает внутрь предыдущей структуры.
· Число символов в полном имени файла.
· Число символов только в имени файла.
Зачем нужны эти два предыдущих поля? Например, функция GetModuleHandle с помощью указателя просматривает структуры IMTE и для ускорения поиска сравнивает длины запрашиваемого модуля и модуля в очередной структуре IMTE, если длины не совпадают, то сравнивать имена смысла не имеет.
· Число разделов в модуле. Например, раздел, содержащий данные, программный код и т.д.
· Базовый адрес, по которому был запущен модуль.
· Счётчик ссылок к модулю.
· Счётчик числа ссылок в модуле, например, если какая-то программа была запущена на выполнение три раза, то для этой программы создаётся три объекта ядра процесса и одна база данных модуля.
Дата публикования: 2014-11-03; Прочитано: 324 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!