admin管理员组文章数量:1026989
当我们想要调试操作系统时,可以修改操作系统启动参数,方法有二,一是在系统启动时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/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,正确加载符号表:
可惜硬件抽象层的源代码并没有释放。当我们想要调试操作系统时,可以修改操作系统启动参数,方法有二,一是在系统启动时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/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,正确加载符号表:
可惜硬件抽象层的源代码并没有释放。版权声明:本文标题:Windows操作系统的内核调试方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1726304859a607334.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论