首页
社区
课程
招聘
[原创]WinDbg学习笔记(一)--认识WinDbg
发表于: 2009-7-27 20:45 28652

[原创]WinDbg学习笔记(一)--认识WinDbg

2009-7-27 20:45
28652

WinDbg学习笔记(一)--认识WinDbg

一、前言
    本人学习WinDbg已经有好几天了,虽说技术掌握的还不太熟练,不过也总算是入门了在学习WinDbg的过程中,觉得WinDbg真的比OllyDbg难很多(不知道是不是习惯OllyDbg的缘故),所以就想做点笔记,那以后自己忘了也可以拿出来复习,也为同样在学WinDbg的兄弟提供一点帮助。文章写得有点啰嗦,初学者应该可以很快看完,老鸟就可以飘过了…

二、WinDbg简介
    WinDbg是微软发布的一款免费而十分强大的调试工具。既然是微软自己发布的调试工具,那它对微软产品的调试当然是十分的强大。但虽说是功能强大,操作起来有时可能十分困难。有时候,可能WinDbg很多特别的功能我们还没知道,就更别说用得上了。我是个WinDbg的初学者,开始的时候觉得WinDbg真的很难入门,不过现在资料看多了,也就算是参悟了点。很多时候,我们习惯用OllyDbg或SoftICE(SoftICE我没用过),所以,也可以先从我们熟悉的入手,慢慢了解WinDbg。

下面是http://bbs.dbgtech.net/ 里一些资料的截图,可以加深我们对WinDbg的了解。(本人没有侵犯原作者版权的意思,只是想着把资料整理出来方便大家看。如有冒犯,请见谅)

内核调试方面:


用户调试方面:



虽说WinDbg在无源码调试方面确实比较困难,但在调试内核方面却真的有独到之处。我跟大家一样,可能本身对OllyDbg比较熟悉,所以我会尝试跟着CCDebuger大牛所写的《OllyDbg入门系列》的模式进行笔记的书写。

三、WinDbg的安装与配置

WinDbg包含在WDK里,也可以独立的下载。
官方的下载地址:http://www.microsoft.com/whdc/devtools/debugging/default.mspx
汉化版的下载地址:http://bbs.pediy.com/showthread.php?t=81746&highlight=WinDbg

下载下来的一般是WinDbg的安装程序,跟一般程序的安装过程类似。安装完后,若要使用汉化版本,就直接把汉化后的启动文件(例如WinDbg_cn.exe)复制到安装目录下,再直接点击(WinDbg_cn.exe)即可。

启动后的界面类似:


到这里,可能会发现没有其它窗口。但其实,只要你点击对应的窗口按钮(上图红色方框圈着的区域),工作区就会出现相应的窗口。

WinDbg有好几个窗口,功能跟OllyDbg的差不多。窗口的名称与用途如下:

名称                    热键            用途
Command                 Atl+1           输入命令、显示命令结果和调试信息输出
Watch                   Alt+2           观察指令全局变量、局部变量和寄存器的信息
Locals                  Alt+3           自动显示当前函数的所有局部变量
Registers               Atl+4           观察和修改寄存器的值
Memory                  Alt+5           观察和修改内存数据
Call Stack              Alt+6           栈中记录的函数调用序列
Disassembly             Alt+7           反汇编
Scratch Pad             Alt+8           白板,可以用来做调试笔记等
Processes and Threads   Alt+9           显示所有调试目标的列表,包括进程和线程等
Command Browser         Alt+N           执行和浏览命令
在弹出需要的窗口后,就可以对窗口进行排列。通过鼠标拖曳窗口或结合右击窗口标题选择Dock(停靠)和Always floating(保持浮动),可以把窗口摆放成最适合我们工作的位置。


不知道是不是我自己的问题,本来想着把窗口排列成跟OllyDbg的界面类似,可怎么弄也达不到目的,最后也就选择了两个我最常用的窗口(Disassembly和Command),然后上下摆放。就像:


各位如果有摆放窗口的诀窍,麻烦也告之一下….

四、符号、源码路径设置

刚才也说过,WinDbg是一款很强大的源码调试工具。如果我们有程序的源码的话,一般可以生成它的符号文件。而在用WinDbg进行调试时,因为WinDbg本身不会自动识别符号文件,所以需要我们设置。
可以通过打开菜单 File  Symbol File Path 和 File  Source File Path,打开对应的对话框进行设置。




可以直接在Source path编辑框输入目录,也可以通过按钮Browse进行选择。多个目录之间用分号隔开。

到这里,可能有人有疑问。符号文件是什么?为什么我们以前用OllyDbg时不用设置符号文件?
其实我接触到这里的时候也十分的迷惑,甚至当时以为WinDbg只能调试有源码的文件。但后来,通过试验,逐步清楚了。

按我理解,符号就是用来标识程序的某个函数、变量或标记的东西。例如,通过载入有源代码和程序符号的目标文件,就可以轻松的使用 bp WinMain(我用来测试的程序的主函数)和bp 函数名(程序里的某个函数)。

那如果没有源代码怎么办?那只好使用微软的公共符号库。所谓公共符号库,可以理解成WinDbg对某些微软的系统函数(例如MessageBoxA)的识别,就像OllyDbg能够识别出MessageBoxA一样。虽然WinDbg能够识别出这些系统函数,但却显示的不明显(到后面会接触到)。

要设置公共符号文件,只需在设置符号文件的编辑框里输入路径即可。一般的输入形式为:
SRV*g:\symbols*http://msdl.microsoft.com/download/symbols
意思大概就是从http://msdl.microsoft.com/download/symbols的地址里下载符号到g:\symbols(自己设置用来保存符号的目录)。然后设置完可以使用 .reload 命令WinDbg重新加载新的符号文件。具体的用法可以参考WinDbg的帮助文档。

五、工作空间

工作空间,是WinDbg用来保存当前工作环境的工具。例如可以保存当前工作的窗口布局、符号路径设置等,当再次载入时就不用重新设置。

例如,当前工作空间还没载入任何的调试文件,那么它就是WinDbg默认的打开环境。在这里的所有设置,包括窗口布局。符号源码路径设置等,都可以根据用户需要保存起来。WinDbg提供多种保存方式,包括

Save Workspace  ---  直接保存(保存到默认文件)
Save Workspace as ---  另存为(保存到用户指定的文件)
--------------------------------------------------------------------------
上面两种方式所说的文件其实并不是真正的文件,而是WinDbg在注册表里存放工作空间的项。
注册表的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces
这个键里一般包含四个子键User、Kernel、Dump、Explicit,前3个子键用来保存用户态调试、内核态调试、调试转储文件时使用Save Workspace方式系统默认的保存路径,而Explicit则用来记录使用Save Workspace as方式保存的命名工作空间。有时或者会发现没有某个子键,这是因为你的WinDbg还没调试过使用该种调试方式的文件。
例如,我注册表HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces里有这些项:

那就说明,我的WinDbg目前还没进行过Dump文件的调试。

再展开User子键看看:

可以看出,我在用户态调试过3个程序,它们分别是CrackMe3.exe、CrackMe32.exe和adsfsf.exe,而且使用Save WorkSpace方式保存。

可能有人会问,有时后我调试完程序后没有选择Save WorkSpace而是直接关闭WinDbg也会自动的保存工作空间。这是因为你的WinDbg使用了“总是保存”的方式。
可以通过打开 菜单----view----Options 打开设置对话框:

图中用红色方框圈着的就是工作空间关闭时的提示。
选择 【Always ask】  在工作空间关闭时总是询问用户是否保存;
选择 【Always save】 在关闭时自动把工作空间保存起来;
选择 【Never save】  从不保存。

另外,WinDbg还提供另外一种保存方式【Save WorkSpace to File】,作用跟上面两种的方式差不多,只不过把工作空间以文件的形式保存到磁盘里,那么用户就可以通过U盘或其它方式把工作空间的环境移植到其它机器上使用。

在打开工作空间方面,当原本是使用默认的保存方式时,WinDbg在打开目标文件的时候同时也会自动打开其对应的工作空间文件。

另外,在载入调试目标后改变了工作空间并保存后,并不改变WinDbg默认的启动环境,只改变调试目标对应的工作空间保存文件,而只有在WinDbg还没载入任何调试目标时改变的才会影响原来的启动环境。

六、常用操作与命令
F9:设置断点,只要在光标定位的位置(上图中灰色条)按F9键即可,再按一次F9键则会删除断点。(相当于OllyDbg 中的 F2)

F10:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。(相当于 OllyDbg中的 F8)

F8 or F11:单步步入。功能同单步步过(F10)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。(相当于 OllyDbg 中的 F7)

F7:运行到选定位置。作用就是直接运行到光标所在位置处暂停。(相当于 OllyDbg 中的 F4)

Shift+F11:运行到跳出函数。

F5:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。(相当于 OllyDbg 中的 F9)

WinDbg没有类似OllyDbg的【执行到用户代码】功能,但可以用 笨笨雄 写的插件,又或者可以多次按Shift+F11直到跳到用户代码。

    注意,如果反汇编窗口中的某行显示蓝色,并不一定该行就是当前执行到的地址。在WinDbg的反汇编窗口,每次显示的代码行数都是固定的,可以通过窗口右上角的previous和next按钮或着鼠标滑轮查看前后的代码,而每次显示在中间的必定会显示蓝色。要回到当前执行到的指令,只需点击菜单的 Edit – > Go to Current Instruction 即可。

七、总结
经过nightxie大牛的提点,知道了bu下的断点可以保存到WorkSpace里。谢谢提点


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 97697
活跃值: (200759)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
Support.

http://bbs.dbgtech.net/ 的资料 链接有误修改一下.
2009-7-27 21:24
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
总结的不错,对我这样的新人很有帮助
感谢楼主
2009-7-27 21:48
0
雪    币: 304
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
多谢支持,已经修改了
2009-7-27 22:09
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
5
支持。

在设置条件断点并执行命令上面比OD要好很多,由于windbg支持超多命令,所以这个也就超灵活了,这方面OD的那个命令插件显然太弱了。
还有就是用windbg带壳调试的时候用int3断点也很OK,俺的一点体会。
2009-7-27 22:11
0
雪    币: 304
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
受教了
2009-7-27 22:13
0
雪    币: 86
活跃值: (56)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
7
用bp不会保存在workspace的,用bu就可以了。。。

帮助文档说的很清楚
Breakpoints that you set by using bu are saved in WinDbg workspaces, but breakpoints that you set by using bp are not saved in workspaces.

2009-7-27 22:57
0
雪    币: 304
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
谢谢提点
2009-7-28 00:14
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
好东东,学习了
2009-7-28 00:15
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
支持!收藏了。
2009-7-28 12:06
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
11
zhuwg

楼上很有可能是马甲...
2009-7-28 13:04
0
雪    币: 546
活跃值: (1616)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
12
好帖,正在学习IDA,等我学会了,在学windbg。呵呵!
2009-7-28 15:49
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
13
say nothing, up
2009-7-29 17:17
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
果然是个好帖 学习一下 楼主辛苦了。大家共同努力进步。
2009-7-29 17:40
0
雪    币: 486
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不错,非常适合新手看!
2009-10-2 09:51
0
雪    币: 197
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
大家学习,好东西!!!
2009-10-3 00:41
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
支持   学习了
2009-10-22 11:48
0
雪    币: 167
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
你看看我是不是马甲?
2009-10-22 12:20
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
19
提供一个工作空间,窗口布局如下:
上传的附件:
2009-10-28 12:54
0
雪    币: 26
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
多谢,学习了。窗口的拜访可以点击  Move  with  frame  来实现。如下图:
上传的附件:
2017-7-5 15:26
0
雪    币: 187
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
     WinDbg入门系列.part1.rar
     WinDbg入门系列.part2.rar
     WinDbg入门系列.part3.rar        
这三个东西,下载下来是一样的内容?!
2018-12-7 14:55
0
游客
登录 | 注册 方可回帖
返回
//