由于时间紧张,只写几个基本步骤和关键点,主要是备忘,算不上什么文章。
由于SOFTICE停止更新,现在最好用用的当然是微软自己的内核调试工具WINDBG,WINDBG既可以调试应用程序,也可以调试内核程序,并且支持源代码调试。
下面大略介绍一下用WINDBG对内核以及驱动进行调试的环境的搭建方法。
1 双机调试
WINDBG的内核调试只能在双机间进行,WINDBG运行在宿主主机上,宿主主机和目标主机之间最好通过串口线连接,当然也可以用过1394,USB进行调试,后期版本增加了network调试方式,WINDBG的版本一直在跟新,可以根据具体的版本自行选择。我自己采用的是通过串口进行调试,这里需要注意的是,如果直接用一条串口线连接宿主主机和目标主机的串口,那么不能使用一般的串口线,而必须使用交叉串口线,这是很多新手容易犯错的地方。交叉串口线可市面上比较少,如有焊接工具可自行修改连线,只需把2,3号线交叉一下即可。
基本的配置
WINDBG上面的配置,通过crtl+k打开内核调试界面,在COM选项下面,Baud Rate 一般设置为115200,Port设置为com1,根据你的串口序列而定。
截图如下:
目标主机的设置,对于XP或者2000系统,只需要修改boot.ini,添加一个调试启动项,这样OS才能进入被调试,不多说了,调试启动项目配置如下:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /NOEXECUTE=OPTIN /FASTDETECT /debug /debugport=COM1 /baudrate=115200
这样在WINDOWS的启动项中多了一个调试模式,选中回车进入,然后在WINDBG里面立即按下热键crtl+break,WINDBG会立即中断系统,这时候你可以在自己的代码上设置断点,或者其他操作。
为了能实现源代码调试,必须设置符号文件路径和源文件路径:
为了能从微软服务器上获取系统模块的符号文件,可以在Symbols search Path中添加这样的路径:SRV*d:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols;
后面你可以接着添加自定义驱动模块的符号文件的路径。
源文件的路径就无需敷数了。
2 单机下通过虚拟机进行调试
双机模式需要2台PC,而且交叉串口线也不容易搞到。因此通过在虚拟机中安装目标主机,然后以管道模拟串口对目标主机进行调试的方法开始流行起来。
如果要调试虚拟机中的系统,需要先对虚拟机进行一些简单的设置,下面以VM7.0为例,简单介绍一下设置的过程。
WINDBG的开始调试界面配置如下:
而在VM这边,假设你已经创建了一个XP的虚拟系统,默认情况下是没有串口的,在设置页面上添加一个串口,必须最后配置成如下图的模式:
当然了 最后也要在此虚拟系统中修改boot.ini文件,添加一个调试启动项,这样,你就可以像双机调试一样调试虚拟机中的目标系统了。
3 用virtual box加速WINDBG对虚拟机环境下的调试
首先是下载VirtualKD安装包,解压后,可以找到一个叫target的子目录,将该target目录copy到虚拟机,点击target/vminstall.exe 运行,然后直接安装即可。
vminstall.exe会自动检测虚拟机的内核版本。
选择install,按照提示直接重启,再次启动的时候你会发现,在启动项中自动添加了一条属于VirtualKD的启动项目。
接着,在宿主端开启vmmon.exe程序即可,点击debugger path选择你的调试工具,vmmon程序必须保持开启,最后点击Run Debugger。vmmon.exe 会调用windbg进入内核调试模式,并等待目标系统的启动。