Модули

Образ — это исполняемый файл, библиотека DLL или драйвер, загруженный Windows в рамках процесса пользовательского режима или ядра. Файл, из которого было загружено изображение, называется его файлом образа.

Подсистема отладчика кэширует список модулей для каждого процесса (или, в режиме ядра, виртуального процесса). Как правило, каждый модуль в этом списке представляет образ в процессе. Список модулей подсистемы можно синхронизировать с целевым объектом с помощью перезагрузки.

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

Модуль можно указать по его базовому адресу в виртуальном адресном пространстве целевого объекта или по индексу в списке модулей, которые подсистема поддерживает для целевого объекта. Индекс модуля равен его позиции в списке модулей, и поэтому этот индекс изменится при выгрузке модуля с более низким индексом. Все выгруженные модули имеют индексы; они всегда выше индексов загруженных модулей. Базовый адрес модуля не изменится до тех пор, пока он остается загруженным; в некоторых случаях он может измениться, если модуль выгружается, а затем перезагружается.

Индекс — это число от нуля до количества модулей в целевом объекте минус единица. Количество модулей в текущем процессе можно найти, вызвав Метод GetNumberModules.

Индекс можно использовать для поиска базового адреса путем вызова Метода GetModuleByIndex. Базовый адрес модуля, владеющего символом с заданным именем, можно найти с помощью GetSymbolModule.

Следующие методы возвращают индекс и базовый адрес указанного модуля:

  • Чтобы найти модуль с заданным именем, используйте getModuleByModuleName.

  • Модуль, диапазон виртуальных адресов которого содержит заданный адрес, возвращается командлетом GetModuleByOffset. Этот метод можно использовать для поиска индекса модуля с учетом базового адреса модуля.

Следующие методы возвращают сведения о модулях, указанных базовым адресом или индексом:

Выгруженные модули

Во время отладки в пользовательском режиме выгруженные модули отслеживаются только в Windows Server 2003 и более поздних версиях Windows. В более ранних версиях Windows отслеживались только выгруженные модули в режиме ядра. При отслеживании они индексируются после загруженных модулей. Следовательно, любой метод, выполняющий поиск модулей целевого объекта, будет искать все загруженные модули, а затем выгруженные модули. Выгруженные модули можно использовать для анализа сбоев, вызванных попыткой вызова выгруженного кода.

Искусственные модули

Искусственные модули можно создать для маркировки области памяти. Эти модули не могут содержать реальные символы, но могут содержать искусственные символы. Метод AddSyntheticModule создает новый искусственный модуль. Искусственные модули можно удалить с помощью RemoveSyntheticModule. При перезагрузке всех модулей в целевом объекте удаляются все искусственные модули.

Путь к изображению

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

Путь к исполняемому образу может состоять из нескольких каталогов, разделенных точкой с запятой (;). Поиск в этих каталогах выполняется по порядку.

Общие сведения о пути к исполняемому образу см. в разделе Путь к исполняемому образу.

Чтобы добавить каталог к пути к исполняемому образу, используйте метод AppendImagePath. GetImagePath возвращает весь путь к исполняемому образу и может быть изменен с помощью SetImagePath.

Дополнительные сведения

Дополнительные сведения о процессах и виртуальных процессах см. в разделе Потоки и процессы.