• WinDBG命令概览(下) 扩展命令


    扩展命令(Extension Command)用于实现针对特定调试目标的调试功能. 与标准命令和元命令是内建在WinDBG程序文件中不同, 扩展命令式实现在动态加载的扩展模块(DLL)中的.

    利用WinDBG的SDK, 用户可以自己编写扩展模块和扩展命令. WinDBG程序包中包含了常用的扩展命令模块. 存放在以下几个子目录中.

    • NT4CHK: 调试目标为Windows NT 4.0 checked版本时的扩展命令模块.
    • NT4FRE: 调试目标为Windows NT 4.0 free 版本时的扩展命令模块.
    • W2KCHK: 调试目标为Windows 2000 checked 版本时的扩展命令模块.
    • W2KFRE: 调试目标为Windows 2000 free 版本时的扩展命令模块.
    • WINXP: 调试目标为Windows XP 或者更高版本时版本时的扩展命令模块.
    • WINEXT: 适用于所有Windows版本的扩展命令模块.

    扩展模块

    路径

    描述

    ext.dll

    WINEXT

    适用于各种调试目标的常用扩展命令

    kext.dll

    WINEXT

    内核态调试时的常用扩展命令

    uext.dll

    WINEXT

    用户态调试时的常用扩展命令

    logexts.dll

    WINEXT

    用于监视和记录API调用(Windows API Logging Extensions)

    sos.dll

    WINEXT

    用于调试托管代码和.Net程序

    ks.dll

    WINEXT

    用于调试内核流(Kernel Stream)

    wdfkd.dll

    WINEXT

    调试使用WDF(Windows Driver Foundation)编写的驱动程序

    acpikd.dll

    WINXP

    用于ACPI调试,追踪调用ASL程序的过程,显示ACPI对象

    exts.dll

    WINXP

    关于堆(!heap)、进程/线程结构(!teb/!peb)、安全信息(!token、!sid、!acl)和应用程序验证(!avrf)等的扩展命令

    kdexts.dll

    WINXP

    包含了大量用于内核调试的扩展命令

    fltkd.dll

    WINXP

    用于调试文件系统的过滤驱动程序(FsFilter)

    minipkd.dll

    WINXP

    用于调试AIC78xx小端口(miniport)驱动程序

    ndiskd.dll

    WINXP

    用于调试网络有关驱动程序

    ntsdexts.dll

    WINXP

    实现了!handle、!locks、!dp、!dreg(显示注册表)等命令

    rpcexts.dll

    WINXP

    用于RPC调试

    scsikd.dll

    WINXP

    用于调试SCSI有关的驱动程序

    traceprt.dll

    WINXP

    用于格式化ETW信息

    vdmexts.dll

    WINXP

    调试运行在VDM中的DOS程序和WOW程序

    wow64exts.dll

    WINXP

    调试运行在64位Windows系统中的32位程序

    wmitrace.dll

    WINXP

    显示WMI追踪有关的数据结构、缓冲区和日志文件

    执行扩展命令式, 应该以叹号( ! )开始, 叹号在英文中被称为bang, 因此扩展名伶也被称为Bang Command. 执行扩展命令的完整格式是:

    ![扩展模块名].<扩展命令名> [参数]

    其中, 扩展模块名可以省略, 如果省略, WinDBG会自动在已经加载的扩展模块中搜索指定的命令.

    因为扩展命令是实现在动态加载的扩展模块(DLL)中的, 所以执行时需要加载对应的扩展模块. 当调试目标被激活(debuggee activation)时, WinDBG会根据调试目标的类型和当前的工作空间自动加载命令空间中指定的扩展模块. 用户也可以使用一下方法手动加载扩展模块.

    • 使用.load命令加上扩展模块的名称或者完成路径来加载它. 如果没有指定路径, 那么WinDBG会在扩展模块搜索路径(EXTPATH)中寻找这个文件.
    • 使用.loadby命令加上扩展模块的名称和一个已经加载的程序模块的名称. 这时WinDBG会在指定的程序模块文件所在目录中寻找和加载扩展命令模块. 例如, 在调试托管程序是, 可以使用.loadby sos mscorwks命令让WinDBG在mscorwks模块所在的目录中加载SOS扩展模块, 这样可以确保加载正确版本的sos模块.

    当使用"!扩展模块名.扩展命令名"的方式执行扩展命令时, 如果指定的扩展模块还没有加载, 那么WinDBG会自动搜索和加载这个模块.

    使用.chain命令可以列出当前加载的所有扩展模块, 使用.unload和.unloadall命令可以卸载指定的或者全部扩展模块. 大多数扩展模块都支持help命令来显示这个模块的基本信息和所包含的全部命令, 例如执行!ext.help可以显示ext模块中的所有扩展命令.

    摘自<软件调试>- 张银奎

  • 相关阅读:
    i春秋暑期训练营丨渗透测试工程师开课啦
    CTF必备技能丨Linux Pwn入门教程——环境配置
    i春秋四周年中奖名单出炉丨确认过眼神,你是中奖人
    i春秋四周年福利趴丨一纸证书教你赢在起跑线
    「你学习,我买单」i春秋四周年精品课程福利专场
    i春秋四周年庆典狂欢丨价值6000元的Web安全课程免费送啦
    倒计时3天!i春秋四周年盛典狂欢,钜惠不停
    「学习攻略」0基础转型白帽黑客第一步是什么?
    奖金高达150万元的NEST即将上线,速来报名
    「白帽挖洞技能」YxCMS 1.4.7 漏洞分析
  • 原文地址:https://www.cnblogs.com/awpatp/p/1660490.html
Copyright © 2020-2023  润新知