WinDbg使用基础

来源:互联网 发布:中国频道 域名转出 编辑:程序博客网 时间:2024/06/05 17:02

启动WinDbg后发现以一般的软件并没有什么差别,菜单工具栏,客户区,状态栏都有,估计作用也差不多


为了学习WinDbg,让整个过程尽量可控,我们自己编写被调试程序:


生成release版本的exe文件,为模拟一般情况下的调试我们将exe文件拷贝到一个单独的路径上。通过WinDbg的File->Open Executable菜单打开生成的exe文件,出现command窗口,command包含显示和输入两个部分,一个用来输入调试指令,另外一个给出显示信息:


WinDbg在启动进程时发出一个调试事件,产生一次断点时间(cc)。查看下这个断点的地址附近内容!address+[断点地址]:


command中会显示这块内存的一些基本信息,打开反汇编窗口(Disassembly)可以看到这个地址附近的一些内容。作为调试来说我们需要给一些位置的指令下断点,而目前我们完全不知道该再哪里下断点,也不知道这些地址如何跟我们编写的代码相互关联起来。我们使用伪寄存器$exentry标识程序入口点,我们打上断点bp $exentry后,使用指令g或者快捷键F5继续运行以至于命中断点。输入!address+[断点地址]在反汇编窗口中看到断点地址的前后内容,并给在ret指令之前的每个地址打上断点就,每次运行g指令就可以想单步调试一样看到控制台窗口的输出过程。


正常情况下我们是不可能以这样的方式进行调试的,我们需要更加高效的处理这些问题,故而我们可以通过符号文件的帮助来定位地址。File->Symbol File Path将符号文件路径加入到workspace中,勾选reload选项或者使用.relord指令加载符号文件,使用x HelloWorld!*可以找到模块中每个指令对应的说明:


在有源代码的情况下可以加入源代码来查看更高级和直观的信息File->Symbol File Path:




0 0