Fstark's blog

WinDbg初步学习总结与简单实战

点击返回顶部

首页

关于

归档

首页

关于

归档

个人总结

WinDbg初步学习总结与简单实战

WinDbg核心功能介绍

WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。

WinDbg加载自编译HelloWorld程序

本部分使用的helloworld源程序与之前相比没有改动,唯一需要注意的是在使用visual c++生成文件时需要生成.pdb文件,它是该应用程序相应的符号文件,若没有它调试将变得十分困难。

打开windbg,点击:File->Open Executable,选中编译好的helloworld.exe文件。随后我们使用lm命令查看一下加载了那些模块。

img

我们想要运行到HelloWorld.exe的main函数中停下,可以使用!dh -a helloworld命令,用来在所有头部文件中搜索helloworld关键词,需要注意的是这里呈现的地址结果是相对虚拟地址(RVA),并非真实地址。

img

从图中可得它的想对虚拟地址为0x3510,由开始lm命令中可知,helloworld模块的起始地址为0x00400000,这两个十六进制相加结果为0x403510,此即为main函数真实地址,我们使用bp命令在该处进行断点,bl可以看到断点的详情。

img

随后使用g命令运行,成功命中0号断点

img

此时对应的Disassembly窗口显示如下图所示

img

此时即为helloworld入口点main处。事实上还有另一种更为轻松的方式来寻找入口点main,我们在windbg的命令行中直接输入bp main,让其自行判断main的位置并设置断点,但是断的位置可能并不十分精准,mainCRTStartup才是真正的程序入口点。

img

WinDbg分析真实程序

下面我们以windows自带的记事本为例进行简单调试。首先打开WinDbg,在”文件” 菜单上, 选择 “打开可执行文件”。 在 “打开可执行文件” 对话框中, 导航到包含 notepad.exe 的文件夹 (例如, C:\Windows\System32)。 对于 “文件名”, 请输入 notepad.exe。 单击“打开” 。

img

此时若要查看Notepad.exe各个模块的符号,可以输入该命令: x notepad!*

随后将会看到结果的输出。

img

若要查看Notepad.exe 模块中包含 main 的符号, 可以命令: x notepad!main

img

在记事本上设置断点notepad!WinMain,输入以下命令: bu notepad!WinMain

要验证是否设置了断点,请输入以下命令: bl

img

运行,请输入以下命令: g

记事本一直运行到winmain函数,然后中断到调试器。

img

此时要查看在记事本进程中加载的代码模块列表,请输入以下命令: lm

img

要查看堆栈跟踪,请输入以下命令: k

img

再次运行 g,要中断记事本执行,请从“调试”菜单中选择“中断”。

观察保存过程,要在zwwritefile处设置和验证断点,请输入以下命令: bu ntdll!ZwWriteFile和 bl。

img

输入g重新开始运行记事本。在记事本窗口中,输入一些文本,然后从“文件”菜单中选择“保存”。当涉及zwCreateFile时,正在运行的代码将中断。输入k以查看堆栈跟踪。

img

在windbg窗口的命令行左侧,注意处理器和线程号。在本例中,当前处理器编号为0,当前线程编号为2。因此,我们正在查看线程2的堆栈跟踪(它恰好运行在处理器0上)。要查看记事本进程中所有线程的列表,请输入以下命令:~

img

要查看线程0的堆栈跟踪,请输入以下命令:~0s,并输入k查看详情。

img

要退出调试并从记事本进程中分离,请输入以下命令: qd,则本次调试结束记事本程序关闭。

WinDbg常用命令总结

命令 含义 说明
p Step 单步步过
t Trace 单步步入
pa Step to Address 单步到指定地址 不进入子函数
ta Trace to Address 追踪到指定地址 进入子函数
pc Step to Next Call 单步执行到下一个函数调用
tc Trace to Next Call 追踪执行到下一个函数调用
tb Trace to Next Branch 追踪到下一条分支指令
g Go 恢复运行
gu Go Up 执行到函数返回
q Quit 停止调试
.detach detach 分离调试器
bp 设置软件断点
bu 对未加载的模块设置断点
bm 批量设置断点
ba 设置硬件断点
bl 列出所有断点
bc 删除断点
bd 禁止断点
be 启用断点
!address 显示内存信息 如内存范围、内存权限等。

WinDbg插件使用

Windbg也支持插件,winxp和winext是插件的默认搜索目录,插件要放在windbg根目录或插件文件夹中,加载后可以用命令“!插件名.help”来查看帮助,“!导出函数”来使用功能。加载插件用.load(直接使用!ext.xxx的方式也能加载ext插件),卸载用.unload,使用.chain能清晰看到当前加载的插件和搜索目录。

插件名称 主要功能
AddSym 允许在IDA和WinDBG之间传输符号名称
CmdHist 记录您在调试会话中执行的每个命令,以便您可以轻松地重新执行
narly 列出了有关加载模块的信息,如使用SafeSEH,ASLR,DEP,/ GS(缓冲区安全检查)
PyKD 允许Python用于脚本WinDBG
windbgshark 集成Wireshark协议分析器,以实现VM流量操纵和分析
MSEC 提供自动崩溃分析和安全风险评估
Mona(需要PyKD) 帮助高级分析/查找漏洞的命令集
Core Analyzer 检查堆结构是否损坏,检测线程共享的对象等
上一页: OllyDbg初步学习总结与简单实战 下一页: 加壳脱壳初步学习总结与简单实战

两个鬼故事画漫画的软件个人独资企业起名别墅起名赵培辰免费在线店铺起名方法查姓起名男孩子男孩新生宝宝起名大全gba换装迷宫2公司起名名字三个字精选陈姓起名贪睡的女孩子起网名刘振阳高新技术公司起名贾姓氏女孩起名大全张彬彬霸气公布恋情sd敢达官网55you魔兽地图公司免费起名咨询类公司起名155网盘碧欧泉好用么3月15日后取消核酸奶茶店起名字宝典起名子带木的字有哪些从一到十爱情红包句子女孩起名带秋字婚宴酒店起名硕字起名姓夏女孩宝宝起名在年代文里当极品少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化