WinDbg的扩展,也可以叫插件。它用于实现针对特定调试目标的调试功能,用于扩展某一方面的调试功能。扩展的实现是通过扩展模块(DLL)实现的。Windbg本身已经包含了很多扩展命令,这些扩展为这Windbg调试器提供了强大的功能和灵活性。调试器扩展命令的使用与标准调试器命令非常相似。但是,虽然内置调试程序命令本身是调试程序二进制文件的一部分,但调试程序扩展命令是由与调试程序不同的DLL公开的。windbg可以添加扩展功能,用户可以自己实现一组功能并添加到windbg中,把包含扩展功能的dll文件放到windbg目录下的winext子目录 ,windbg就会自动加载扩展模块。这允许您编写新的调试器命令,这些命令是根据您的特定需求定制的。

加载调试器扩展DLL

有几种方法可以加载调试器扩展DLL,以及控制默认调试器扩展DLL和默认调试器扩展路径:

  • 在启动调试程序之前,使用\u nt \u debugger \u extension \u path环境变量设置扩展DLL的默认路径。这可以是多个目录路径,用分号分隔。
  • 使用.load(加载扩展dll)命令加载新的dll。
  • 使用.unload(卸载扩展dll)命令卸载dll。
  • 使用.unload all(卸载所有扩展DLL)命令卸载所有调试器扩展。
  • 启动调试器之前,使用-a命令行选项设置默认扩展dll。
  • 使用.extpath(设置扩展路径)命令设置扩展dll搜索路径。
  • 使用.set dll(设置默认扩展dll)命令设置默认扩展dll。
  • 使用.chain(list debugger extensions)命令以默认搜索顺序显示所有加载的调试器扩展模块。
 您也可以通过使用full加载扩展dll!第一次从该模块发出命令时使用module.extension语法。您使用的扩展DLL必须与目标计算机的操作系统匹配。随Windows软件包调试工具一起提供的扩展DLL都放置在安装目录的不同子目录中:
  • winxp目录包含可用于Windows XP和更高版本的Windows的扩展。
  • winext目录包含可与任何版本的Windows一起使用的扩展。dbghelp.dll模块位于Windows调试工具的基本目录中,也包含此类型的扩展。

如果编写自己的调试器扩展,则可以将它们放在任何目录中。但是,建议您将它们放在新目录中,并将该目录添加到调试器扩展路径中。最多可以加载32个扩展DLL。

使用调试器扩展命令

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

调试器扩展由以下语法调用:
![module.]extension [arguments]

模块名后面不应跟.dll文件扩展名。如果模块包含完整路径,则默认字符串大小限制为255个字符。如果模块尚未加载,则将使用对LoadLibrary(模块)的调用将其加载到调试器中。调试器加载扩展库后,调用getprocAddress函数在扩展模块中查找扩展名。扩展名区分大小写,输入时必须与扩展模块的.def文件中显示的完全一致。如果找到扩展地址,则调用该扩展。

如果未指定模块名称,调试器将搜索加载的扩展模块以进行此导出。默认搜索顺序如下:
  1. 在所有操作系统和两种模式下工作的扩展模块:dbghelp.dll和winext\ext.dll。
  2. 可在所有模式下工作但特定于操作系统的扩展模块。对于Windows XP和更高版本的Windows,这是winxp\exts.dll。Windows 2000没有相应的模块。
  3. 与所有操作系统一起工作但特定模式的扩展模块。对于内核模式,这是winext\kext.dll。对于用户模式,这是winext\uext.dll。
  4. 操作系统特定和模式特定的扩展模块。下表指定了此模块。
    Windows Build User Mode Kernel Mode

    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

卸载扩展模块时,它将从搜索链中删除。加载扩展模块时,它将添加到搜索顺序的开头。.set dll(设置默认扩展dll)命令可用于将任何模块提升到搜索链的顶部。通过反复使用此命令,可以完全控制搜索链。使用.chain(list debugger extensions)命令以当前搜索顺序显示所有加载的扩展模块的列表。如果尝试执行不在任何加载的扩展模块中的扩展命令,将收到“导出未找到”错误消息。

编写新的调试器扩展

您可以通过编写扩展dll来创建自己的调试命令。例如,您可能希望编写一个命令来显示复杂的数据结构,或者根据某些变量或内存位置的值来停止和启动目标的命令。
有两种不同类型的调试器扩展:
  • dbgeng扩展。这些是基于dbgeng.h头文件和wdbgexts.h头文件中的原型。
  • WDBGexts扩展。这些都是基于wdbgexts.h头文件中的原型。
后面会详细讲解编写自己的扩展功能。

WinDbg扩展的更多相关文章

  1. 【逆向知识】开发WinDBG扩展DLL

    如何开发WinDbg扩展DLL WinDbg扩展DLL是一组导出的回调函数,用于实现用户定义的命令.以便从内存转储中提取特定的信息.扩展dll由调试器引擎加载,可以在执行用户模式或内核模式调试时提供自 ...

  2. 如何查看WinDbg扩展有哪些命令

    如果您想查看任何windbg扩展所支持的命令,可以采用各种方法. 你可以用!<ext_name>.help命令查看该扩展支持的所有命令.用扩展模块名替换<ext_name>.( ...

  3. Windbg扩展的一些参考文章

    Windbg脚本和扩展工具开篇http://www.cnblogs.com/pugang/archive/2012/11/30/2796617.html WinDbg简单扩展DLL http://ww ...

  4. Windbg脚本和扩展工具开篇

    好长一段时间没写文章了,最近一直忙于为项目的可调式性做一些脚本和扩展工具,鉴于对windbg强大威力的震撼,以及相对较少的资料,笔者决定写一系列关于如何开发Windbg脚本和扩展命令的文章,您的支持是 ...

  5. .Net Memory -- Windbg基本命令

    命令 解释 .cls 清空命令窗口屏幕 .load dllfullpath 加载debugger扩展dll如SOS sosex psscor. .loadby dll moduleName 加载deb ...

  6. SEH分析笔记(X64篇)

    SEH分析笔记(X64篇) v1.0.0 boxcounter 历史: v1.0.0, 2011-11-4:最初版本. [不介意转载,但请注明出处 www.boxcounter.com  附件里有本文 ...

  7. IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表

    原文:  IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表 IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中 ...

  8. WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...

  9. WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...

随机推荐

  1. pytest_使用自定义标记mark

    前言 pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行.app自动化的时候,如果想android和ios公用一套代码时,也可以使用标记功能,标明哪些是i ...

  2. 【Maven基础入门】01 Maven的安装与环境变量的配置

    写在前面: Mavne,作为一个优秀的项目构建工具,虽说我们平时在使用的时候或多或少的会使用到它,但了解仅限于它能构建项目,然后其他的就不知道了. 以及仓库.POM父类文件.等等. 工欲善其事,必先利 ...

  3. ArcGIS Engine中C#开发不能引用ESRI.ArcGIS.AxControls问题

    问题:ArcGIS Engine中C#开发不能引用ESRI.ArcGIS.AxControls问题 解决方法:将这里的特定版本改成“False”即可.

  4. C#获取文件夹下的所有文件的方法

    目录 #基础知识 #只获取目录下一级的文件夹与文件 # 递归地输出当前运行程序所在的磁盘下的所有文件名和子目录名 正文   #基础知识 1.获得当前运行程序的路径 1 string rootPath ...

  5. [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算

    1 前言 略,作为记录使用 2 代码 /** * @Author: FB * @Description: * @File: RotateSample.go * @Version: 1.0.0 * @D ...

  6. 易百教程人工智能python修正-人工智能NLTK性别发现器

    在这个问题陈述中,将通过提供名字来训练分类器以找到性别(男性或女性). 我们需要使用启发式构造特征向量并训练分类器.这里使用scikit-learn软件包中的标签数据. 以下是构建性别查找器的Pyth ...

  7. Mysql把一个表的数据写入另一个表中

    一.表结构一样 insert into 表1 select * from 表2 二. 表结构不一样或者取部分列 insert into 表1 (列名1,列名2,列名3) select 列1,列2,列3 ...

  8. springCloud学习1(集中式配置管理)

    springcloud 总集:https://www.tapme.top/blog/detail/2019-02-28-11-33 一.前言   在开发普通的 web 应用中,我们通常是将配置项写在单 ...

  9. windows搭建测试环境

    1.安装python  安装地址: https://www.python.org/downloads/windows/ Download Windows x86-64 executable insta ...

  10. suctf2019 部分web题目的复盘

    1.简单的SQL注入 一开始一直没思路,输入什么过滤什么,结束后看了大佬们的wp,感觉学到了,这里涉及到Mysql中的一个特殊模式的设置 set sql_mode=pipes_as_concat; 这 ...