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

那么一个完整的windbg script是什么样子的呢?首先让我们看如下示例:

$$ 该脚本是列出用户进程和栈

r $t0 = nt!PsActiveProcessHead 
.for (r $t1 = poi(@$t0); (@$t1 != 0) & (@$t1 != @$t0); r $t1 = poi(@$t1)) 

  r? $t2 = #CONTAINING_RECORD(@$t1, nt!_EPROCESS, ActiveProcessLinks); 
  .process @$t2 
  .reload 
  !process @$t2
}

相对于Windbg脚本,windbg扩展比较复杂,而且通常需要花费更大的精力写出同样的功能,但是它带来的一个好处就是你可以获得更多的功能,你甚至可以通过这些扩展写一个调试器,那么一个完整的windbg扩展又是什么样子的呢?该扩展dll打印出一个全局字符串的值。

以C++语言编写的windbg扩展示例:

HRESULT CALLBACK 
PrintPTR(PDEBUG_CLIENT pDebugClient, PCSTR args)
{
    UNREFERENCED_PARAMETER(args);

IDebugSymbols* pDebugSymbols;
    if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugSymbols), (void **)&pDebugSymbols)))
    {    // Resolve the symbol
        ULONG64 ulAddress = 0;
        if (SUCCEEDED(pDebugSymbols->GetOffsetByName("TestSTLMap!g_wString", &ulAddress)))
        {
            IDebugDataSpaces* pDebugDataSpaces;
            if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugDataSpaces), (void **)&pDebugDataSpaces)))
            {    // Read the value of the pointer from the target address space
                ULONG64 ulPtr = 0;
                if (SUCCEEDED(pDebugDataSpaces->ReadPointersVirtual(1, ulAddress, &ulPtr)))
                {
                    PDEBUG_CONTROL pDebugControl;
                    if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugControl), (void **)&pDebugControl)))
                    {    // Output the values
                        pDebugControl->Output(DEBUG_OUTPUT_NORMAL, "%p TestSTLMap!g_wString= 0x%p\n", ulAddress, ulPtr);
                        pDebugControl->Output(DEBUG_OUTPUT_NORMAL, "%mu\n", ulPtr);
                        pDebugControl->Release();
                    }
                }
                pDebugDataSpaces->Release();
            }
            pDebugSymbols->Release();
        }
    }
    return S_OK;
}

总结

基于笔者的研究发现,国内做相关研究的人并不多,其实国外也就几个业内比较牛的人做的相对比较好,但是这些工具的作用足以让你震撼,今天开个头,有兴趣的朋友可以继续关注后续文章。

Windbg脚本和扩展工具开篇相关推荐

  1. windbg 脚本学习总结

    windbg 脚本简单入门 http://blog.csdn.net/superliuxing/article/details/19206985 Windbg的功能自然不必说,集内核调试,应用程序调试 ...

  2. 渗透脚本快速生成工具Intersect

    渗透脚本快速生成工具Intersect 当渗透人员获取目标系统的执行权限,往往需要编写相应的脚本,实现更多的渗透操作.Kali Linux提供一款Python脚本快速生成工具Intersect.该工具 ...

  3. linux shell脚本 静态检查工具 shellcheck 简介

    简介 shellcheck 是一款实用的 shell脚本静态检查工具. 首先,可以帮助你提前发现并修复简单的语法错误,节约时间.每次都需要运行才发现写错了一个小地方,确实非常浪费时间. 其次,可以针对 ...

  4. chrome使用脚本修改组策略_允许Chrome安装第三方网站的脚本以及扩展的方法

    涵盖 Windows XP/7 .Mac OS X .Linux 的 Chrome 第三方应用安装策略说明. 听说众多 Chrome 粉丝为 Google 禁止安装第三方应用的问题感到相当烦恼.那么我 ...

  5. Chrome 扩展工具及命令

    一些Chrome的地址栏命令(这些命令会不停的变动,所有不一定都是好用的) 在Chrome的浏览器地址栏中输入以下命令,就会返回相应的结果.这些命令包括查看内存状态,浏览器状态,网络状态,DNS服务器 ...

  6. chrome使用脚本修改组策略_允许新版本 Chrome 安装第三方网站的脚本以及扩展的方法...

    涵盖 Windows XP/7 .Mac OS X .Linux 的 Chrome 第三方应用安装策略说明. 听说众多 Chrome 粉丝为 Google 禁止安装第三方应用的问题感到相当烦恼.那么我 ...

  7. 编写windbg调试器扩展 入门篇1

    我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令. 0.前言 windbg的命令有很多,其中以" ...

  8. autoCaptcha谷歌浏览器扩展工具-调用api识别验证码图片

    autoCaptcha chrome谷歌浏览器扩展工具 调用api识别验证码图片 gitee releases下载地址 api: http://www.bhshare.cn/imgcode/ ps: ...

  9. Script.NET脚本语言开发工具2.1.1版本发布,支持Ruby脚本的开发、调试等功能

    Script.NET是蓝蚂蚁工作室开发的一套用于Tcl/Python/Ruby/Lua/NSIS 等脚本语言开发的集成开发环境,刚刚发布的2.1.1版本新增了Ruby脚本的支持,可以支持Ruby脚本的 ...

最新文章

  1. vue2.0读书笔记2-进阶
  2. [python]函数默认参数顺序问题
  3. placement new--《C++必知必会》 条款35
  4. Qt--在.pro文件中添加链接库的写法
  5. predict函数 R_学习|R语言做机器学习的常用函数总结
  6. 2021谷饶中学高考成绩查询,高考成绩
  7. 作者:赵永恒(1964-),男,博士,中国科学院国家天文台研究员、博士生导师...
  8. Leetcode91. Decode Ways
  9. python的输出语句_python 中简单的输出语句
  10. 005 IK-analyzer添加搜狗词库
  11. matlab轴向柱塞泵动力学仿真,基于ADAMS柔性模型的轴向柱塞泵动力学仿真
  12. 12.3 实现一个剪贴板查看器
  13. 图说报告 | “智能+”的终极版图:数字孪生世界
  14. 在四位共阴极数码上显示“2 3 5 8”四个数字
  15. 相位一致性的基本原理及应用问题
  16. 压缩PPT大小的方法是什么?
  17. oracle语法基础
  18. Java基础_17 | Java多线程程序设计(Java中两种创建线程的方法、多线程之间的同步和互斥)
  19. Android FMRadio上层调试
  20. 阿里云团队协作网盘Teambition之目录程序

热门文章

  1. Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
  2. 实战SSM_O2O商铺_20【商铺编辑】View层开发
  3. MyBatis-22MyBatis缓存配置【一级缓存】
  4. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)
  5. Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
  6. WebView完全解读
  7. 《数据结构》知识点Day_05
  8. 怎么解决线上CPU100%的问题
  9. Docker 安装MySQL以及外部访问
  10. java防止表单二次提交_防止表单重复提交