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


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

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

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

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

! [module.]extension[arguments]

Имя модуля не должно следовать с расширением имени файла .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 (Экспорт не найден).