Windows Kernel Way 1:Windows内核调试技术
掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种:
(1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功之后便可以调试,此时即可以调试Windows内核启动过程,又可以在Windows启动之后调试某内核组件或应用程序。或使用Windbg的Kernel debugging of the local mechine功能,在Windows系统完全启动之后,调试Windows内核组件或应用程序。这种方式需要配置Windows系统以DEBUG模式启动。
(2)通过Bochs来运行Windows系统,可以在Windows运行的任意时刻调试任意信息,但最大的缺点就是,这种方式目前不支持使用Windows Symbols,与第一种方式相比,汇编代码读起来并不直观。
本文介绍方式(1)即通过Windbg工具调试Windows内核。
1、Windbg工具简介及获取方式
Windbg工具是微软团队开发和公布的一款专门用于调试Windows内核及应用程序的调试器,既支持内核级(Ring0)调试,也支持应用程序级(Ring3)调试。如今的Windows系统调试器有多种,出了Windbg以外,还有Olldbg、Immunity Debugger等。Olldbg和Immunity Debugger不支持内核级调试。
Windbg工具包含在Windows Driver Kit(WDK,Windows驱动开发包)中,当然也可以单独下载。
(1)如果要通过WDK方式获取的话,Windows XP及之前的环境只要下载WDK即可,整个资源大约300M~500M,但是在Windows Vista/Windows 7等系统之后,微软将WDK与Visual Studio环境集成到一起,因此整个下载资源大约6.0G~7.0G。由于Windows XP系统不再支持,并且笔者的实验环境为Windows 7系统,在后续的文章中也会涉及到Windows驱动开发,所以笔者建议下载WDK与VS集成包,虽然资源比较大。
(2)如果只是暂时学习Windows内核调试的话,可以单独下载Windbg工具,整个资源大约150M。
以上资源皆可以在MSDN上获取,获取链接为:http://msdn.microsoft.com/zh-cn/windows/hardware/hh852365.aspx
2、Windows Symbols简介及获取方式
Windows Symbols是微软公开的Windows系统符号表,使用Windbg调试WIndows内核和应用程序时可以很直观地看到部分变量名称、结构体结构、函数名称等。
Windows Symbols可以直接在MSDN上获取,其获取页面与上述给出的获取Windbg工具的页面链接相同。
但是笔者不建议直接下载并安装Windows Symbols,因为在使用Windbg工具调试时,可以根据需要即时获取相关模块的符号信息(如果网络正常的话)。
3、Windows内核调试方法
通过虚拟机调试Windows系统是种常见的方式,即首先搭建虚拟机环境,即将Windows系统安装在虚拟机中,然后配置虚拟机Windows系统的启动模式为DEBUG模式,并且配置好Windbg工具与虚拟机Windows系统之间的通信通道,在Windbg进入等待调试通信的时候,重启虚拟机Windows系统,双方的调试链接建立以后,即可使用Windbg工具调试/控制Windows内核,详细步骤如下:
(1)配置虚拟机Windows系统以DEBUG模式启动。
进入虚拟机Windows系统,以管理员身份运行cmd.exe,执行以下命令:
bcdedit /debug on //启用Windows内核调试支持
bcdedit /bootdebug on //启用应用程序的启动过程调试支持
关于bcdedit命令的详细信息,可以在MSDN中了解:http://msdn.microsoft.com/zh-cn/library/dn653986(v=vs.85).aspx
上述方式仅在Windows Vista/7系统及以后版本的Windows系统中有效,如不做特殊说明,笔者的实验环境默认为VirtualBox/Windows 7系统。
对于Windows XP系统的配置,请自行GOOGLE。
(2)配置Windbg与虚拟机Windows系统的调试通信通道。
关闭虚拟机Windows系统,在虚拟机“串口配置”中,启用某个串口,比如COM1,并将该串口的端口模式设置为“主机管道”,并选择“创建通道”,在“端口/文件位置”中输入待创建的虚拟的管道设备名称,比如“\\.\pipe\comdbg”(注意格式,“comdbg”名称用户自定义):
打开Windbg,在“Kernel Debug”(Ctrl+K)对话框的“COM”标签页中将“Port”也配置为“\\.\pipe\comdbg”:
点击确定后,Windbg进入尝试与目标建立通信通道状态:
此时启动虚拟机的Windows系统,一段时间以后,调式通信通道建立成功:
此时,在Windbg中按快捷键“Ctrl+Break”即可中断虚拟机Windows的启动/运行过程(第一次一般会下载符号表,需要耐心等待):
此时便可以输入各种调试指令,比如输入“g”命令就可以继续虚拟机Windows的运行过程。
由于Windbg的内核调试指令与Windows内核原理相关,所以在后面的Windows内核原理分析时会详细说明Windbg使用及相关指令。
最新文章
- django shell 集合
- python3学习笔记目录
- IOS集合NSSet与NSMutableSet知识点
- 在eclipse中进行Struts2项目的配置
- (5)VS2010无法打开gl/glaux.h头文件的解决方法
- 在SQL语言中,join什么时候用,什么时候不用啊?请高手举例解释一下。谢谢
- CSS之transition(动画)
- WPF自定义控件(三)——Window
- [转] ADO.NET实体框架引发争论
- Codeforces Round #331 (Div. 2)C. Wilbur and Points 贪心
- 使用Spring-data-redis操作Redis的Sentinel
- cocos2d 高仿doodle jump 无源代码
- [BZOJ]4644: 经典傻逼题
- FFmpeg源代码结构图 - 解码
- Linux下的快捷键
- C#基础知识回顾:1.由WeakReference想到对象的创建与销毁
- mysql数据库授权
- 使用rvm关联ruby版本和rails版本。
- ROS----TUT-RIM协作机器人和Actin-ROS接口
- 【384】reduce归纳、map映射、filter筛选 的用法
热门文章
- Java练习之最大相同子串
- jQuery.FlexiGrid使用总结
- linux scp 服务器远程拷贝
- Codeforces Round #336 (Div. 2) C. Chain Reaction set维护dp
- YouTube上的版权保护
- UITableViewCell重用机制
- SICP 习题 (1.7) 解题总结
- 终端I/O之终端窗口的大小
- IIS错误日志:Failed to execute request because the App-Domain
- 创建对象_原型(Prototype)模式_深拷贝