Windbg脚本和扩展工具开篇
好长一段时间没写文章了,最近一直忙于为项目的可调式性做一些脚本和扩展工具,鉴于对windbg强大威力的震撼,以及相对较少的资料,笔者决定写一系列关于如何开发Windbg脚本和扩展命令的文章,您的支持是我最大的动力,希望本系列文章对您有所帮助。
那么一个完整的windbg script是什么样子的呢?首先让我们看如下示例:
$$ 该脚本是列出用户进程和栈
.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扩展示例:
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脚本和扩展工具开篇相关推荐
- windbg 脚本学习总结
windbg 脚本简单入门 http://blog.csdn.net/superliuxing/article/details/19206985 Windbg的功能自然不必说,集内核调试,应用程序调试 ...
- 渗透脚本快速生成工具Intersect
渗透脚本快速生成工具Intersect 当渗透人员获取目标系统的执行权限,往往需要编写相应的脚本,实现更多的渗透操作.Kali Linux提供一款Python脚本快速生成工具Intersect.该工具 ...
- linux shell脚本 静态检查工具 shellcheck 简介
简介 shellcheck 是一款实用的 shell脚本静态检查工具. 首先,可以帮助你提前发现并修复简单的语法错误,节约时间.每次都需要运行才发现写错了一个小地方,确实非常浪费时间. 其次,可以针对 ...
- chrome使用脚本修改组策略_允许Chrome安装第三方网站的脚本以及扩展的方法
涵盖 Windows XP/7 .Mac OS X .Linux 的 Chrome 第三方应用安装策略说明. 听说众多 Chrome 粉丝为 Google 禁止安装第三方应用的问题感到相当烦恼.那么我 ...
- Chrome 扩展工具及命令
一些Chrome的地址栏命令(这些命令会不停的变动,所有不一定都是好用的) 在Chrome的浏览器地址栏中输入以下命令,就会返回相应的结果.这些命令包括查看内存状态,浏览器状态,网络状态,DNS服务器 ...
- chrome使用脚本修改组策略_允许新版本 Chrome 安装第三方网站的脚本以及扩展的方法...
涵盖 Windows XP/7 .Mac OS X .Linux 的 Chrome 第三方应用安装策略说明. 听说众多 Chrome 粉丝为 Google 禁止安装第三方应用的问题感到相当烦恼.那么我 ...
- 编写windbg调试器扩展 入门篇1
我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令. 0.前言 windbg的命令有很多,其中以" ...
- autoCaptcha谷歌浏览器扩展工具-调用api识别验证码图片
autoCaptcha chrome谷歌浏览器扩展工具 调用api识别验证码图片 gitee releases下载地址 api: http://www.bhshare.cn/imgcode/ ps: ...
- Script.NET脚本语言开发工具2.1.1版本发布,支持Ruby脚本的开发、调试等功能
Script.NET是蓝蚂蚁工作室开发的一套用于Tcl/Python/Ruby/Lua/NSIS 等脚本语言开发的集成开发环境,刚刚发布的2.1.1版本新增了Ruby脚本的支持,可以支持Ruby脚本的 ...
最新文章
- vue2.0读书笔记2-进阶
- [python]函数默认参数顺序问题
- placement new--《C++必知必会》 条款35
- Qt--在.pro文件中添加链接库的写法
- predict函数 R_学习|R语言做机器学习的常用函数总结
- 2021谷饶中学高考成绩查询,高考成绩
- 作者:赵永恒(1964-),男,博士,中国科学院国家天文台研究员、博士生导师...
- Leetcode91. Decode Ways
- python的输出语句_python 中简单的输出语句
- 005 IK-analyzer添加搜狗词库
- matlab轴向柱塞泵动力学仿真,基于ADAMS柔性模型的轴向柱塞泵动力学仿真
- 12.3 实现一个剪贴板查看器
- 图说报告 | “智能+”的终极版图:数字孪生世界
- 在四位共阴极数码上显示“2 3 5 8”四个数字
- 相位一致性的基本原理及应用问题
- 压缩PPT大小的方法是什么?
- oracle语法基础
- Java基础_17 | Java多线程程序设计(Java中两种创建线程的方法、多线程之间的同步和互斥)
- Android FMRadio上层调试
- 阿里云团队协作网盘Teambition之目录程序
热门文章
- Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
- 实战SSM_O2O商铺_20【商铺编辑】View层开发
- MyBatis-22MyBatis缓存配置【一级缓存】
- Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)
- Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
- WebView完全解读
- 《数据结构》知识点Day_05
- 怎么解决线上CPU100%的问题
- Docker 安装MySQL以及外部访问
- java防止表单二次提交_防止表单重复提交