Поделиться через


Использование команд расширения отладчика

Использование команд расширения отладчика очень похоже на использование команд отладчика. Команда вводится в командном окне отладчика, создавая выходные данные в этом окне или изменение целевого приложения или целевого компьютера.

Фактическая команда расширения отладчика — это точка входа в библиотеке DLL, вызываемой отладчиком.

Расширения отладчика вызываются следующим синтаксисом:

! [модуль.]extension [аргументы]

Имя модуля не должно следовать с расширением имени файла .dll. Если модуль содержит полный путь, ограничение размера строки по умолчанию составляет 255 символов.

Если модуль еще не загружен, он будет загружен в отладчик с помощью вызова LoadLibrary(module). После загрузки библиотеки расширений отладчик вызывает функцию GetProcAddress , чтобы найти имя расширения в модуле расширения. Имя расширения учитывает регистр и должно быть введено точно так же, как оно отображается в def-файле модуля расширения. Если адрес расширения найден, вызывается расширение.

Порядок поиска

Если имя модуля не указано, отладчик будет искать загруженные модули расширения для этого экспорта.

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

  1. Модули расширения, работающие со всеми операционными системами и в обоих режимах: Dbghelp.dll и winext\ext.dll.

  2. Модуль расширения, работающий во всех режимах, но зависящий от операционной системы. Для Windows XP и более поздних версий Windows это winxp\exts.dll.

  3. Модуль расширения, работающий со всеми операционными системами, но зависящий от режима. Для режима ядра это winext\kext.dll. Для пользовательского режима это winext\uext.dll.

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

Режим пользователя Режим ядра
winxp \ ntsdexts.dll winxp \ kdexts.dll

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

Используйте команду .chain (Расширения отладчика списка) для отображения списка всех загруженных модулей расширений в текущем порядке поиска.

Если вы попытаетесь выполнить команду расширения, которая не находится ни в одном из загруженных модулей расширения, вы получите сообщение об ошибке export Not Found.