使用调试器扩展命令

调试器扩展命令的使用与调试器命令的使用非常相似。 该命令在调试器命令窗口中键入,在此窗口中生成输出或目标应用程序或目标计算机的更改。

实际的调试器扩展命令是调试器调用的 DLL 中的入口点。

调试器扩展由以下语法调用:

![module.]extension [arguments]

模块名称不应跟.dll文件扩展名。 如果 模块 包含完整路径,则默认字符串大小限制为 255 个字符。

如果模块尚未加载,将使用对 LoadLibrary(模块的调用将其加载到调试器中。 调试器加载扩展库后,它会调用 GetProcAddress 函数以在扩展模块中找到扩展名称。 扩展名称区分大小写,必须完全按照扩展模块的 .def 文件中显示的方式输入。 如果找到扩展地址,则会调用该扩展。

搜索顺序

如果未指定模块名称,调试器将搜索加载的扩展模块以获取此导出。

默认搜索顺序如下所示:

  1. 适用于所有操作系统和这两种模式的扩展模块:Dbghelp.dll和 winext\ext.dll。

  2. 适用于所有模式但特定于操作系统的扩展模块。 对于 Windows XP 和更高版本的 Windows,这是 winxp\exts.dll。

  3. 适用于所有操作系统但特定于模式的扩展模块。 对于内核模式,这是 winext\kext.dll。 对于用户模式,这是 winext\uext.dll。

  4. 特定于操作系统的扩展模块和特定于模式的模块。 下表指定此模块。

用户模式 内核模式
winxp \ ntsdexts.dll winxp \ kdexts.dll

卸载扩展模块后,将从搜索链中删除它。 加载扩展模块时,它将添加到搜索顺序的开头。 .setdll (设置默认扩展 DLL) 命令可用于将任何模块提升到搜索链顶部。 通过重复使用此命令,可以完全控制搜索链。

使用 .chain (List Debugger Extensions) 命令可按当前搜索顺序显示所有已加载扩展模块的列表。

如果尝试执行不在任何已加载扩展模块中的扩展命令,则会收到“未找到导出”错误消息。