相信和我一样的人都听说过Windows内核这个名词,简单的理解,内核就是系统主要功能的实现,它运行于内核态(IA32 CPU的ring0环下),我们要查看系统内棱中的东西,就需要使用调试器来调试内核。这听上去是一个非常复杂的事情,但实际上却是无比的简单,下面就跟我来一步一步的完成。
一、给虚拟机添加串口
在Vmware中安装虚拟操作系统,需要注意的是,如果安装Ghost版的Window s系统,则需要先使用自带的分区工具分区后才能够进行安装。安装完虚拟机操作系统后,我们要做的事情就是给系统添加一个串口,我们就以调试Win7为例。
单击Vmware界面中的“编译虚拟机设置”,然后在弹出的对话框中单击“添加”按钮,在“添加硬件向导”中选择“串口”,点击“下一步”,选择第三项“输出到命名管道”,保证第三项为“其他终端是一个程序”,然后单击“完成”即可。
二、配置虚拟机boot.ini文件
给虚拟机添加串口后,我们需要配置虚拟操作系统的boot.ini文件,以保证虚拟操作系统可以被调试。启动Win7,打开“我的电脑”,在“工具”——“文件夹选项”中将“隐藏受保护的操作系统(推荐)”前面的勾去掉,并勾选“显示所有文件和文件夹”,确定后退出,此时进入系统盘,已经可以看到boot.ini文件了,选中boot.ini文件,点击右键选择“属性”,去掉“只读”前面的勾,然后使用记事本打开文件后,复制“[operatingsystems]”这段下的内容,并加入“/debug/debugport=coml/baudrate=57600”的参数,保存后退出,重启虚拟机就可以看到调试选项了。
三、安装符号表
上面的配置是针对虚拟机的,接下来我们需要在物理机中安装符号表,我们都知道Windows系统其实也是一个程序,而且是使用c/c++语言编写的一个程序,因此在编写时就会写入一定的调试信息,这些调试信息我们称作符号表,把很多的符号表打包制作成可安装的文件即为符号表文件,我们可以去微软的官方网站下载符号表文件,找到Win7的符号表文件后,网页显示有N多个,我们需要将Win7没有打补丁以及打SP1补丁、打SP2补丁的符号表文件都下载回来,因为每打一次补丁,系统都会有不同的更改,我们不知道发生了哪些变化,因此需要将这些符号表都下载回来。在安装时需要注意,先安装没有补丁的Win7,然后再安装Win7 sp1,最后再安装Win7 sp2。安装时一定要籽符号表解压到相同目录,比如“E:\windows\sysmbols”,以实现打补丁后符号表的替换。
四、配置Windbg
符号表设置完成后,就需要来配置windbg了,windbg是微软提供的一个调试器,我们可以去官方网站下载Debugging Tools for Windows工具包,也可以到百度中搜索下载链接,安装完成后,在安装目录中找到windbg.exe,然后点击右键,选择“发送到”——“桌面快截方式”,在桌面上打开快截方式的“属性”,在目标中填写“-y e:\Windows\Symbols\-b-k com:port=\\.\pipe\com_1,baud=57600,pipe”参数,“-y”指明的是上面我们安装的符号表的位置,“-baud”指明的是串口速率,与上面设置的baudrate-致,“pipe”用于说明使用管道传输。
五、调试内核
首先运行虚拟机,并选择第二项,等待调试,然后运行Windbg,再切换到虚拟机,按回车后进人调试系统。如果出现了假死,则可以重新再启动一次windbg,如果看到提示,则调试可以开始了。此时在windbg的下方“kd>”处输入“g”回车就可以启动想要调试的操作系统,windhg会有提示,如果要切换回调试器,则使用ctrl+break键即可,对于windbg相关的命令我们可以从阿上查找到相关的资料,这与OD没什么区别,只是可以调试内核而已。