使用调试器扩展命令
调试器扩展命令的使用与调试器命令的使用非常相似。 该命令在调试器命令窗口中键入,在此窗口中生成输出或目标应用程序或目标计算机的更改。
实际的调试器扩展命令是调试器调用的 DLL 中的入口点。
调试器扩展由以下语法调用:
![module.]extension [arguments]
模块名称不应跟.dll文件扩展名。 如果 模块 包含完整路径,则默认字符串大小限制为 255 个字符。
如果模块尚未加载,将使用对 LoadLibrary(模块)的调用将其加载到调试器中。 调试器加载扩展库后,它会调用 GetProcAddress 函数以在扩展模块中找到扩展名称。 扩展名称区分大小写,必须完全按照扩展模块的 .def 文件中显示的方式输入。 如果找到扩展地址,则会调用该扩展。
搜索顺序
如果未指定模块名称,调试器将搜索加载的扩展模块以获取此导出。
默认搜索顺序如下所示:
适用于所有操作系统和这两种模式的扩展模块:Dbghelp.dll和 winext\ext.dll。
适用于所有模式但特定于操作系统的扩展模块。 对于 Windows XP 和更高版本的 Windows,这是 winxp\exts.dll。
适用于所有操作系统但特定于模式的扩展模块。 对于内核模式,这是 winext\kext.dll。 对于用户模式,这是 winext\uext.dll。
特定于操作系统的扩展模块和特定于模式的模块。 下表指定此模块。
用户模式 | 内核模式 |
---|---|
winxp \ ntsdexts.dll | winxp \ kdexts.dll |
卸载扩展模块后,将从搜索链中删除它。 加载扩展模块时,它将添加到搜索顺序的开头。 .setdll (设置默认扩展 DLL) 命令可用于将任何模块提升到搜索链顶部。 通过重复使用此命令,可以完全控制搜索链。
使用 .chain (List Debugger Extensions) 命令可按当前搜索顺序显示所有已加载扩展模块的列表。
如果尝试执行不在任何已加载扩展模块中的扩展命令,则会收到“未找到导出”错误消息。