您的位置:首页 > 其它

Windows操作系统的内核调试方法

2011-03-12 12:29 357 查看
当我们想要调试操作系统时,可以修改操作系统启动参数,方法有二,一是在系统启动时F8下,选择调试模式,二是,在启动后,修改启动配置参数。Windows xp /2003 使用 boot.ini 存储启动参数,Windows Vista / 7使用BCD存储启动参数。

对于Windows xp /2003 我们可以直接修改boot.ini 添加调试参数,也可以使用bootcfg /debug 命令添加,如下图:






对于调试远程内核,我们可能要使用串口,在boot.ini中指定操作系统条目后,添加调试参数 /debug /port=com1 /baudrate=115200。在调试器WinDbg中也要指定相同的波特率参数,否者无法正常通信。
使用虚拟机调试,我们一般没有串口,尤其是笔记本电脑,这时候怎么操作呢:
1、使用虚拟串口添加工具vpsd 6.9(在前几篇日志中有对此软件的介绍)在电脑中添加一对调试串口。如com1,com2。
在虚拟机欲调试操作系统的硬件配置中指定调试串口com1.,注意取消“等待调制解调器打开串口”,否者串口无法正常打开。
在调试器Windbg中指定使用串口com2,其他参数保持与启动配置参数相同。
2、使用命名管道,直接在虚拟机和Windbg中分别指定同一个named pipe,如//./pipe/wrk,这种方法较为方便,见诸于很多书籍。
配置完参数后,要启动调试,应选择我们刚才添加调试参数的那一条。

配置完通信端口之后呢,我们要为特定的操作系统加载符号表,注意符号表文件的名称和累积性。
安装符号表要按顺序,具体见windbg的参考文档。
符号表下载地址:http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx。里面有安装的具体说明。
下载完成后,解压到目标位置。
我们启动windbg的方法有很多,网上很多介绍使用批处理启动windbg的,当然也可以使用Windbg的GUI界面和CUI界面设定。如:
D:/WinDDK/7600.16385.1/Debuggers/windbg.exe" -b -k com:port=com2,baud=115200 -y D:/Windows2003/symbols
-y 指定符号表位置。后面还可以指定很多参数,详见Windbg的帮助文件。
到了最关键的一步了,先启动了Windbg,然后调试器打开串口,等待远程系统响应,每10s中发送复位数据包(PACKET_TYPE_KD_RESET),接到响应后建立调试会话,若错过了调试机会(目标系统已初始化完内核调试引擎),可以按ctrl+break,主动发送数据包,调试目标收到后,两者建立会话。(《软件调试》)

实验中发现,首先启动调试器,然后等待虚拟机系统进入调试状态,不能正确加载符号表,试过n次以后发现,当虚拟机操作系统刚进入调试状态时,也就是选择开机启动条目并回车后,马上启动windbg,才能成功加载符号表,不知哪里问题。

下图是使用wrk1.2编译的内核启动Windows server 2003 sp2,正确加载符号表:




可惜硬件抽象层的源代码并没有释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: