首页 > 代码库 > <一> windbg简介

<一> windbg简介

摘抄自博客http://www.pediy.com/kssd/pediy10/94457.html

1.下载 安装

WinDbg是微软发布的一款免费而十分强大的调试工具。

WinDbg包含在WDK里,也可以独立的下载。官方的下载地址:http://www.microsoft.com/whdc/devtoo...g/default.mspx

2.窗口简介

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

 

 

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




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

  符号就是用来标识程序的某个函数、变量或标记的东西。例如,通过载入有源代码和程序符号的目标文件,就可以轻松的使用 bp WinMain(我用来测试的程序的主函数)和bp 函数名(程序里的某个函数)。
  那如果没有源代码怎么办?那只好使用微软的公共符号库。所谓公共符号库,可以理解成WinDbg对某些微软的系统函数的识别。

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

4.工作空间

工作空间,是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还没载入任何调试目标时改变的才会影响原来的启动环境。

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

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

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

F7:运行到选定位置。作用就是直接运行到光标所在位置处暂停。

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

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

又或者可以多次按Shift+F11直到跳到用户代码。

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

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