一,工具准备
1,WinDBG
2,DbgView
3,WDK
4,驱动加载工具
5,虚拟机软件
6,下载symbols 微软官网搜(symbols)
二,虚拟机环境配置
1,安装XP操作系统
2,为虚拟机添加串口 //./pipe/com_1
3,配置boot.ini文件,最后行加入以下代码:
multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
三,配置WinDbg
1,在WinDbg目录内,选中WinDbg.exe创建快捷方式->快捷方式上右键属性->目标处windbg.exe后面加入以下代码:
注意事项:此快捷方式为双机调式用!
2,设置WinDbg符号文件路径,打开WinDbg.exe->文件->符号文件路径->输入symbols的安装路径
四,编写下一个hello 驱动程序,以做测试
1,创建一个DriverHello.c的文本文件,复制以下代码:
#include <ntddk.h> //提供一个Unload函数值是为了让这个程序能动态卸载,方便调试 VOID DriverUnload(PDRIVER_OBJECT driver) { //打印一句话 DbgPrint("bye 驱动!!/r/n"); } //DriverEntry,入口函数。相当于main NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { //这里只输出一句话 DbgPrint("Hello 驱动!/r/n"); //设置一个卸载函数,便于这个函数的退出 driver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
2,创建文件名为makefile及sources的两个文本文件,贴入如下代码:
//makefile
###########以下为贴入代码############################
!ifdef NTMAKEENV
# DO NOT EDIT THIS FILE!!! Edit ./joycpl.inc. if you want to add a new
# source file to this component. This file merely indirects to the
# build environment specific common make file.
!INCLUDE $(NTMAKEENV)/makefile.def
!else
# Win 95
#
ROOT =..
WIN32 =TRUE
!include ../../build.mk
!endif
########################################
//sources文件
###########以下为贴入代码##########################
!IF 0
Copyright (c) 1989 - 2000 Microsoft Corporation
!ENDIF
LINKER_STACKSIZE=-STACK:4096,1024
# Compile for Win95 for widest compatibility
CHICAGO_PRODUCT=1
WIN32_IE_VERSION=0x0300
UMTYPE=windows
TARGETNAME=DriverHello
TARGETPATH=obj
TARGETTYPE=DRIVER
SOURCES=DriverHello.c
五,编译
1,安装过WDK后,可以在开始菜单程序中找到
windows xp checked build Environment
Windows XP Free Build Environment
以上两项
2,选择checked(相当于VC内的DEBUG模式)进入到传说中的黑屏白字窗口.
3,用DOS命令更改当前路径为你的DriverHello的工程目录下。
4,输入build
5,查看执行后的提示,确认无错,可以到工程目录内,找到一个DriverHello.sys文件。
六,本地调试
1,打开DbgView.exe ,以等待输出调试信息。
2,打开驱动加载工具,加载DriverHello.sys文件->启动->停止->卸载 依次观察输出.
七,双机调试
1,修改源代码,加入断点如下所示:
#include <ntddk.h> //提供一个Unload函数值是为了让这个程序能动态卸载,方便调试 VOID DriverUnload(PDRIVER_OBJECT driver) { //打印一句话 DbgPrint("bye 驱动!!/r/n"); } //DriverEntry,入口函数。相当于main NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { #if DBG _asm int 3 #endif //这里只输出一句话 DbgPrint("Hello 驱动!/r/n"); //设置一个卸载函数,便于这个函数的退出 driver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
2,起动配置好的XP虚拟机环境,(虚环境内需要驱动加载工具)-->启动选择调试模式->黑屏,等待下面这一步。
3,打开Windbg.exe(刚建立的快捷方式),连接正常会有提示,看命令窗口中的命令行,输入g以让虚拟机正常运行。
4,虚拟机运行正常,打开驱动加载工具,加载->启动->停止->卸载 以观察Windbg.exe内的输出信息等。
一个Hello 驱动就这吧!!!欢迎各位驱动爱好者一起讨论软件驱动的相关问题!