Debugging Tools for Windows |
使用调试器扩展命令和使用调试器命令非常类似。在调试器命令窗口中输入命令,会在该窗口中产生输出或改变目标程序或目标机。
一个实际的调试器扩展命令是由调试器调用的一个DLL入口点。
以如下语法调用调试器扩展:
module 名字不能包含.dll扩展名。如果module 包含完整路径,默认的字符串尺寸限制为255。
如果模块还没有被加载,调试器会使用LoadLibrary(module)调用来加载它。调试器加载了扩展库之后,会调用GetProcAddress 函数来定位扩展模块中的命令名。扩展命令名是大小写敏感的,并且必须和出现在扩展模块的.def 中的名字完全相同。如果找到了命令地址,则会调用该命令。
如果没有指定模块名,调试器会在已加载的扩展模块中搜索。
默认的搜索顺序如下:
Windows 版本 | 用户模式 | 内核模式 |
---|---|---|
Windows 2000 (free build) |
w2kfre \ ntsdexts.dll | w2kfre \ kdextx86.dll |
Windows 2000 (checked build) |
w2kchk \ ntsdexts.dll | w2kchk \ kdextx86.dll |
Windows XP and later | winxp \ ntsdexts.dll | winxp \ kdexts.dll |
如果某个扩展模块被卸载了,他会被从搜索链中移除。当一个扩展模块被加载,会被添加到搜索顺序的开始位置。.setdll (Set Default Extension DLL)命令可以用来将任何模块提升到搜索链的顶端。可以通过重复使用该命令来完全控制搜索链。
用.chain (List Debugger Extensions) 命令来以当前搜索顺序显示所有加载的扩展模块列表。
如果执行不在任何已加载扩展模块中的命令,会得到一条Export Not Found 错误信息。
关于特定的扩展命令的信息,查看调试器扩展命令参考节。