Структура MODREF.

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

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

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

PDB my.exe


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

MODREF

   
   
kernel32.dll

 

 


индекс в IMTE

таблице

my.exe
   
модулей

 

   
bar.dll

 


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

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

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

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

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

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

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

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

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

 

14. Процессы Win32. Идентификатор процесса и дескриптор процесса. Объект ядра процесс в Win32. Функции для работы с процессами Таблица дескрипторов процесса.

Процесс – есть субъект владения. Процесс владеет памятью, то есть своим ВАП. Владеет дескрипторами файлов, которые прикладная программа может использовать для чтения записи, владеет потоками, списками модулей, dll, которые необходимы процессу для работы. Процесс не представляет исполнение программного кода. За выполнение программного кода отвечают потоки. Каждый процесс связан с файлом на диске. Но файл становится процессом тогда, когда загружен в память на выполнение.

Для работы с процессом ОС создаёт структуру базы данных процесса. Эта база данных PDB. EPROCESS – управляющая структура (идентификатор).

Однозначно сослаться на него можно с помощью дескриптора процесса и идентификатора процесса. Дескриптор – это индекс в таблице дескрипторов процесса, а указателем на процесс является сожержимое таблицы процесса.

TD

PDB
0

 

 


Идентификатор процесса является указателем на базу данных процесса. Функции Win32 для работы с процессами.

CreateProcess(…) – создаёт новый процесс.

ExitProcess(…) – завершает процесс с уведомлением всех подключенных dll.

TerminateProcess(…) – завершает процесс без уведомления подключенных dll.

GetProcessTimes(…) – получает временные параметры процесса. Определяет сколько времени в режиме ядра, а сколько в пользовательском режиме. В Windows 95, 98 функция не поддерживается.

GetCurrentProcess(…) – можно получить дескриптор текущего процесса.

GetCurrentProcessId(…) – можно получить идентификатор текущего процесса.

GetExitCodeProcess(…) – возвращает код завершения процесса.

GetCommandLine(…) – возвращает указатель на командную строку, переданную текущему процессу, то есть можно получить входные параметры с помощью неё.

GetEnvironmentString(…) – возвращает адрес блока переменных окружения.

Структуры данных процесса.

TEB
PEB

 

 


Адресное пространство

процесса

PDB


Блок процесса Win32
Системное адресное

пространство

TDB
Таблица дискрипторов

 

 


 

EB – Environment Block. PEB – блок окружения процесса. TEB – блок окр. потока. TDB – база данных потока. PDB – бд процесса.

PDB или EProcess содержат данные, необходимые ОС для управления процессом и указатели на некоторые доп. структуры.

Блок PDB.Дескрипторы виртуальных адресов – это структуры, описывающие распределение ВАП.Указатель на цепочку потоков данного процесса.Указатель на таблицу дескрипторов.Указатель на блок переменных окружения PEB.

Блок KPROCESS.Содержит доп. информацию:указатель на каталог страниц процесса, базовый приоритет по умолчанию.

Блок переменных окружения (PEB).Расположен в пользовательском адресном пространстве.В Windows 2000 находится по адресу 7FFDF000h. Содержит следующую информацию:Адрес кучи процесса по умолчанию.Указатель на структуры, описывающий загруженные модули.IMTE – описывает все загруженные модули всеми процессами.MODREF – содержит список всех модулей, используемых данным процессом.Содержит указатель на список файлов, которые используются данным процессом.Указатель на базу данных среды, которая содержит текущий каталог, область окружения процесса, командную строку.Указатель на заголовок списка свободного пространства в куче по умолчанию.Указатель на заголовок связанного списка куч процесса.