Использование DBH
DBH — это средство командной строки, которое предоставляет многие функции в API DbgHelp (dbghelp.dll). Он может отображать сведения о содержимом файла символов, отображать конкретные сведения о символах в файле и искать символы, соответствующие различным критериям. Дополнительные сведения см. в статье "Библиотека справки отладки".
Функциональность, предоставляемая DBH, аналогична функции, предоставляемой в WinDbg, KD и CDB командами, такими как x (Проверка символов).
Запуск DBH в интерактивном режиме
Вы запускаете DBH с простой командной строкой, в которой указывается целевой модуль, символы которого вы хотите исследовать. Целевой модуль может быть программой EXE или файлом символов PDB. Вы также можете указать идентификатор процесса (PID) для изучения. Полный синтаксис см . в параметрах командной строки DBH.
При запуске DBH загружает символы для указанного модуля, а затем выводит запрос, в котором можно ввести различные команды. Список доступных команд см . в командах DBH.
Например, следующая последовательность запускает DBH, указав целевой процесс с идентификатором процесса 4672, а затем выполняет команду перечисления в командной строке DBH для отображения символов, соответствующих определенному шаблону, а затем выполняет команду q , чтобы выйти из DBH:
C:\> dbh -p:4672
400000 : TimeTest
77820000 : ntdll
77740000 : kernel32
pid:4672 mod:TimeTest[400000]: enum TimeTest!ma*
index address name
1 42cc56 : main
3 415810 : malloc
5 415450 : mainCRTStartup
pid:4672 mod:TimeTest[400000]: q
goodbye
Запуск DBH в пакетном режиме
Если вы хотите выполнить только одну команду DBH, ее можно указать в конце командной строки. Это приводит к запуску DBH, загрузке указанного модуля, выполнению указанной команды и выходу.
Например, предыдущий пример можно заменить одной командной строкой:
C:\> dbh -p:4672 enum TimeTest!ma*
400000 : TimeTest
77820000 : ntdll
77740000 : kernel32
index address name
1 42cc56 : main
3 415810 : malloc
5 415450 : mainCRTStartup
Этот метод запуска DBH называется пакетным режимом, так как его можно легко использовать в пакетных файлах. За этой версией командной строки также может следовать канал ( | ), который перенаправляет выходные данные DBH в другую программу.
Указание целевого объекта
DBH может выбрать целевой объект тремя способами: идентификатором процесса выполняемого процесса, именем исполняемого файла или именем файла символов. Например, если в настоящее время выполняется ровно один экземпляр MyProg.exe с идентификатором процесса 1234, то следующие команды почти эквивалентны:
C:\> dbh -v -p:1234
C:\> dbh -v c:\mydir\myprog.exe
C:\> dbh -v c:\mydir\myprog.pdb
Одно из различий между этими командами заключается в том, что при запуске DBH путем указания идентификатора процесса DBH использует фактические виртуальные адреса, используемые этим процессом. При запуске DBH, указав исполняемое имя или имя файла символов, DBH предполагает, что базовый адрес модуля является стандартным значением (например, 0x01000000). Затем можно использовать базовую команду, чтобы указать фактический базовый адрес, тем самым переместив адреса всех символов в модуле.
DBH не подключается к целевому процессу таким образом, как выполняет отладчик. DBH не может привести к началу или завершению процесса, а также не может изменить способ выполнения этого процесса. Для подключения DBH к процессу по идентификатору процесса целевой процесс должен выполняться, но после запуска целевого процесса DBH целевой процесс может быть завершен, и DBH будет продолжать получать доступ к его символам.
Декорированные и неоцененные символы
По умолчанию DBH использует неоцененные имена символов при отображении и поиске символов. Если отключить параметр символа SYMOPT_UNDNAME или включить параметр -d в командной строке DBH, будут включены украшения.
Сведения о украшениях символов см. в разделе "Открытые и частные символы".
Выход из DBH
Чтобы выйти из DBH, используйте команду q в командной строке DBH.