编写分析扩展插件时,还编写一个元数据文件,描述要调用插件的情况。 当 !analyze 调试器命令运行时,它使用元数据文件来确定要加载的插件。
创建一个元数据文件,该文件与您的分析扩展插件同名,并且其扩展名为 .alz。 例如,如果分析扩展插件命名为 MyAnalyzer.dll,则必须将元数据文件命名为 MyAnalyzer.alz。 将元数据文件放置在与分析扩展插件相同的目录中。
分析扩展插件的元数据文件是包含键值对的 ASCII 文本文件。 键和值用空格分隔。 键可以具有任何非空格字符。 键不区分大小写。
在键和随后的空白区域之后,相应的值开始。 值可以具有以下形式之一。
行末尾的任意一组字符。 此窗体适用于不包含任何换行符的值。
重要 如果元数据文件中的最后一个值具有此形式的值,则行必须以换行符结尾。
大括号 { }之间的任意字符集。 表单适用于包含换行符的值。
以 # 开头的行是注释,将被忽略。 注释只能从预期键的位置开始。
可以在元数据文件中使用以下键。
| 密钥 | DESCRIPTION |
|---|---|
| PluginId | 字符串 - 标识插件。 |
| DebuggeeClass | 字符串 - 可能的值为“Kernel”和“User”。 指示插件对仅分析内核模式故障或仅分析用户模式故障感兴趣。 |
| 错误检查代码 | 32 位错误检查代码 - 表示插件有兴趣分析此 错误检查代码。 单个元数据文件可以指定多个 bug 检查代码。 |
| 异常代码 | 32 位异常代码 - 指示插件有兴趣分析此 异常代码。 单个元数据文件可以指定多个异常代码。 |
| ExecutableName | 字符串 - 指示插件仅对要分析的进程正在运行的可执行文件的会话感兴趣。 单个元数据文件可以指定多个可执行文件名称。 |
| 图像名称 | 字符串 - 指示插件仅对默认分析认为此图像(dll、sys 或 exe)出错的会话感兴趣。 分析确定哪个图像出现故障后,将调用插件。 单个元数据文件可以指定多个映像名称。 |
| MaxTagCount | 整数 - 插件需要的最大自定义标记数。 自定义标记是 extsfns.h 中定义的标记以外的标记。 |
示例元数据文件
以下元数据文件描述了一个插件,该插件有兴趣分析错误检查代码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}
#