分析扩展插件的元数据文件
编写分析扩展插件时,还会编写一个元数据文件,用于描述要调用插件的情况。 当 !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}
#