使用 DBH

DBH 是一种命令行工具,用于公开 DbgHelp API(dbghelp.dll)中的许多函数。 它可以显示有关符号文件内容的信息、显示文件中符号的特定详细信息,以及搜索文件中匹配各种条件的符号。 有关详细信息,请参阅 调试帮助库

DBH 提供的功能类似于 WinDbg、KD 和 CDB 中通过 x(检查符号)命令提供的功能。

在交互模式下运行 DBH

使用简单的命令行启动 DBH,在该命令行上指定要调查其符号的目标模块。 目标模块可以是 EXE 程序或 PDB 符号文件。 还可以指定要调查的进程 ID(PID)。 有关完整语法,请参阅 DBH 命令行选项

DBH 启动时,它会加载指定模块的符号,然后提示你键入各种命令。 有关可用命令的列表,请参阅 DBH 命令

例如,以下序列通过指定进程 ID 为 4672 的目标进程来启动 DBH,然后在 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 可以通过三种方式选择目标:按正在运行的进程 ID、可执行文件的名称或符号文件的名称。 例如,如果当前运行MyProg.exe只有一个实例,且进程 ID 为 1234,则以下命令几乎等效:

C:\> dbh -v -p:1234 
C:\> dbh -v c:\mydir\myprog.exe 
C:\> dbh -v c:\mydir\myprog.pdb 

这些命令之间的一个区别是,通过指定进程 ID 启动 DBH 时,DBH 将使用此过程使用的实际虚拟地址。 通过指定可执行文件名称或符号文件名来启动 DBH 时,DBH 假定模块的基址是标准值(例如,0x01000000)。 然后 ,可以使用 base 命令指定实际的基址,从而移动模块中所有符号的地址。

DBH 不会以调试器的方式附加到目标进程。 DBH 不能导致进程开始或结束,也不能改变进程运行方式。 要使 DBH 通过其进程 ID 附加到进程,必须运行目标进程,但一旦启动 DBH,目标进程就可以终止,DBH 将继续访问其符号。

修饰符号和未装饰符号

默认情况下,DBH 在显示和搜索符号时使用未编码的符号名称。 如果关闭 SYMOPT_UNDNAME 符号选项,或在 DBH 命令行中包含 -d 选项,则会包含修饰。

有关符号修饰的信息,请参阅 公共符号和专用符号

退出 DBH

若要退出 DBH,请在 DBH 提示符处使用 q 命令。