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


Использование 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.