使用 DBH
DBH 是一种命令行工具,可公开 DbgHelp API (dbghelp.dll) 中的许多函数。 它可以显示有关符号文件内容的信息,显示文件中符号的特定详细信息,并在文件中搜索与各种条件匹配的符号。
DBH 提供的功能类似于 WinDbg、KD 和 CDB 中由命令(如 x (检查符号) 提供的功能)。
在交互模式下运行 DBH
使用简单的命令行启动 DBH,在该命令行上指定要调查其符号的目标模块。 目标模块可以是 EXE 程序或 PDB 符号文件。 还可以 (PID) 指定要调查的进程 ID。 有关完整语法,请参阅 DBH Command-Line 选项 。
当 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、可执行文件的名称或符号文件的名称。 例如,如果当前只有一个进程 ID 为 1234 的 MyProg.exe 实例正在运行,则以下命令几乎等效:
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 不会导致进程开始或结束,也不能更改该进程的运行方式。 若要通过进程 ID 将 DBH 附加到进程,目标进程必须运行,但启动 DBH 后,可以终止目标进程,并且 DBH 将继续访问其符号。
修饰和未修饰的符号
默认情况下,DBH 在显示和搜索符号时使用未修饰的符号名称。 如果关闭 SYMOPT_UNDNAME 符号选项,或在 DBH 命令行中包含 -d 选项,则将包含修饰。
有关符号修饰的信息,请参阅 公共符号和专用符号。
正在退出 DBH
若要退出 DBH,请在 DBH 提示符处使用 q 命令。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈