系统蓝屏实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单蓝屏驱动程序的实现
一、实验目的:
了解驱动程序,简单改写一个驱动程序实现系统蓝屏,了解驱动程序编译调试的环境,熟悉驱动程序调试编译所需环境的配置方法及过程,熟悉一些驱动程序调试的简单命令,尝试对驱动程序进行简单的调试。
二、实验要求:
完成驱动程序调试的环境配置,通过对现有驱动程序的改写来实现系统的蓝屏。分析导致蓝屏的原因。
三、实验原理:
正如普通应用程序的错误会导致程序崩溃,由于驱动程序是内核级的程序,因此,一旦出错,将会导致系统崩溃。
本次试验将通过对现有驱动程序的改写来实现系统的蓝屏,并对其进行调试。调试的原理图如下:
试验中,自己的主机作为调试主机,虚拟机中安装Windows XP 系统,作为目标计算机被调试。调试主机上安装DDK,用于编译生成驱动程序。
四、实验过程:
环境配置
1、实验所需环境及用途
2DDK的安装和简单实用
2、DDK的安装和简单使用说明:
在编写第一个驱动之前需要先安装微软公司的Windows驱动程序开发包DDK (Driver Development Kit),在安装的时候选择完全安装。安装完毕之后我们将会在开始菜单出现相应的项目。我们主要用到的将是Build
Environments/Windows XP/x86 Checked Build Enviroment。
驱动编译版本解释如下:
3、虚拟机安装,Windows XP镜像导入及配置:
(1)、安装虚拟机,这里我们用到的虚拟机是VMware-workstation-9.0.2。(过程略)
(2)、导入Windows XP镜像。(过程略)
(3)、虚拟机共享配置:如下图所示:
4、Windbg安装及设置:
Windbg将安装在调试主机上,安装完毕之后需要进行一些配置才能和目标主机完成连接。配置过程如下所示:
修改windbg属性,鼠标右击windbg.exe-快捷方式,在属性“快捷方式”页面签里修改“目标”为:D:\Windbg\windbg.exe -y C:\Users\Guangshaer\Desktop\驱动程序设计\驱动程序实验工具\XP符号文件\Symbols\ -b -k
com:port=\\.\pipe\com_1,baud=115200,pipe
5、 Sfilter驱动编译及导入目标主机过程:
首先对Sfilter.c进行如下的改写:修改Sfilter.c文件中的返回值”STATUS_SUCCESS”为”*((NTSTATUS*)0)”。
接下来用DDK对我们将要调试的Sfilter驱动进行编译。
如下图所示:
我们进行编译时,从开始菜单选择:Windows Driver Kits/WDK 7600.16385.1/Build Environments/Windows XP/x86 Checked Build Enviroment 选择完毕之后进入命令行方式的窗口,用cd命令进入需要编译的目录,然后输入”bld”。DDK的编译环境会自动调用编译器进行编译。如下图所示:
编译将生成Sfilter.sys文件,将作为Windbg的Source文件。
将前面编译好的Sfilter的文件夹中的 sfilter.inf sfilterInstall.cmd sfilter.sys 三个文件拷贝到虚拟机的一个文件夹中。虚拟机将安装该文件夹中
的驱动安装程序。由于我们将要做的是一个蓝屏程序会使目标主机无法正常的运行,因此在安装Sfilter之前我们要对当前的虚拟机做一个快照备份来使得我们仍旧能回到目标主机正常的状态,免去了目标主机的配置。
将虚拟机与调试主机连接起来的配置:
修改被调试机器的操作系统所在盘的根目录下的boot.ini 文件(用记事本打开即可),加入如下启动选项:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
虚拟机重启之后,便多了一个debug选项。
五、实验结果
启动Windbg
在虚拟机中安装Sfilter,重启虚拟机,会发现虚拟机蓝屏。
于是再次重启虚拟机,启动调试
Windbg此时与虚拟机连接上,在命令窗口的底部显示“kd>”提示符。这代表WinDbg 已经准别好接受命令,WinDbg已经作好响应的准备。界面如下:
设置断点命令为: bp Sfilter!DriverEntry
通过断点的设置和程序的跟踪我们将找到系统蓝屏的原因。Windbg调试找到错
误之处之后显示如下的出错信息:
实验结果
通过代码的改写(将一个指针指向一个不存在的地址空间)我们实现了系统的蓝屏,通过Windbg的调试我们又找到了我们改动的导致系统蓝屏出错的位置。
指出可能的原因是“Sfilter.sys”驱动程序错误。
六、实验分析
实验中我们改写的代码导致了系统的蓝屏,蓝屏实际是指Microsoft Windows 崩溃或者停止执行(由于灾难性的错误或者内部条件组织系统继续运行下去)时
所显示的蓝色屏幕。
Windows崩溃(停止执行并显示蓝屏)一般有以下一些原因:
(1)、运行在内核模式下的设备驱动程序或者操作系统函数引发了一个未被处理的一场,比如内存访问违例。
(2)、调用一个内核支持例程,导致依次重新调度,比如当中断请求级别为DPC/Dispatch级别或更高级别时等待一个处于无信号状态的分发器对象。
(3)、在DPC/Dispatch级别或者更高的IRQL级别是,在“由页面文件或内存映射文件中的数据来支撑的内存”上发生了一个页面错误。
(4)、一个设备驱动程序或操作系统函数显式地使系统崩溃。
(5)、发生硬件错误。
系统崩溃是一种自我保护的行为,在发现非法异常时即屏蔽掉之后的行为,防止之后更严重的异常出现。
不管系统崩溃的原因是什么,真正执行崩溃的函数是KeBugCheckEx。该函数接受一个停止代码,以及四个根据停止代码来解释的参数。KeBugCheckEx屏蔽了该系统的所有处理器上的所有中断以后,将显示器切换到低分辨率VGA 图形模式,绘制一个蓝色背景,然后显示此停止代码,后面紧跟一些文本来建议用户应该怎么办。
上面实验中调试所显示的四个参数即KeBugCheckEx的四个参数。
BugCheck 7E, {c0000005, F9C325AC, F9DC34D4, F9DC31D0}
首先是错误代码0x0000007e
在后面是该错误代码所带的四个参数
(0xC0000005,0xF9C325AC,0xF9DC34D4,0xF9DC31D0)
按照提示输入!analyze –v 我们得到了详细的错误信息,其中: 0x0000007e是一个错误代码,经常由于越界访问内存产生。
0xC0000005 代表越界存取。