分析扩展插件的元数据文件

编写分析扩展插件时,还会编写一个元数据文件,用于描述要调用插件的情况。 当 !analyze 调试器命令运行时,它使用元数据文件来确定要加载的插件。

创建与分析扩展插件同名、扩展名为 .alz 的元数据文件。 例如,如果分析扩展插件名为 MyAnalyzer.dll,则元数据文件必须命名为 MyAnalyzer.alz。 将元数据文件放在分析扩展插件所在的同一目录中。

分析扩展插件的元数据文件是包含键值对的 ASCII 文本文件。 键和值用空格分隔。 键可以具有任何非空格字符。 键不区分大小写。

在键和以下空格之后,相应的值开始。 值可以具有以下形式之一。

  • 行尾的任何字符集。 此窗体适用于不包含任何换行符的值。

    重要 如果元数据文件中的最后一个值具有此形式的值,则行必须以换行符结尾。

  • 大括号 { } 之间的任意字符集。 窗体适用于包含换行符的值。

以 # 开头的行是注释,将被忽略。 注释只能从预期键的位置开始。

可以在元数据文件中使用以下键。

密钥 说明
PluginId 字符串 - 标识插件。
DebuggeeClass 字符串 - 可能的值为“Kernel”和“User”。 指示插件仅对分析内核模式故障或仅分析用户模式故障感兴趣。
BugCheckCode 32 位 bug 检查代码 - 表示插件有兴趣分析此 bug 检查代码。 单个元数据文件可以指定多个 bug 检查代码。
ExceptionCode 32 位异常代码 - 指示插件有兴趣分析此 异常代码。 单个元数据文件可以指定多个异常代码。
ExecutableName 字符串 - 指示插件仅对会话感兴趣,其中这是要分析的进程的运行可执行文件。 单个元数据文件可以指定多个可执行名称。
ImageName 字符串 - 指示插件仅对默认分析认为此图像 (dll、sys 或 exe) 出错的会话感兴趣。 分析确定哪个映像出错后,将调用该插件。 单个元数据文件可以指定多个图像名称。
MaxTagCount Integer - 插件需要的最大自定义标记数。 自定义标记是 extsfns.h 中定义的标记以外的标记。

示例元数据文件

以下元数据文件描述了一个插件,该插件有兴趣分析 bug 检查代码0xE2。 (回想一下,最后一行必须以换行符结尾。)

PluginId      MyPlugin
DebuggeeClass Kernel
BugCheckCode  0xE2

以下元数据文件描述了一个插件,该插件对分析 bug 检查0x8、0x9和0xA(如果 MyDriver.sys 被视为故障模块) 感兴趣。

PluginId      MyPlugin
DebuggeeClass Kernel
BugCheckCode  0x8
BugCheckCode  0x9
BugCheckCode  0xA
ImageName     MyDriver.sys

以下元数据文件描述了一个插件,该插件对分析异常代码0xC0000005(如果 MyApp.exe 是所分析进程的运行可执行文件)感兴趣。 此外,该插件可能会创建多达三个自定义标记。

PluginId        MyPlugin
DebuggeeClass   User
ExceptionCode   0xC0000005
ExecutableName  MyApp.exe

适用于 Windows 的调试工具有一个示例,可用于生成名为 dbgexts.dll 的调试器扩展模块。 此扩展模块实现多个调试器扩展命令,但它也可以用作分析扩展插件;也就是说,它导出 _EFN_Analyze 函数。 下面是一个元数据文件,将 dbgexts.dll 描述为分析扩展插件。

PluginId         PluginSample
DebuggeeClass   User
ExceptionCode   0xc0000005
ExecutableName      cdb.exe
ExecutableName      windbg.exe
#
# Custom tag descriptions 
#
TagDesc         0xA0000000  SAMPLE_PLUGIN_DEBUG_TEXT    {Sample debug help text from plug-in analysis}
#

另请参阅

编写分析扩展插件以扩展 !analyze

_EFN_Analyze

!分析