驱动环境搭建VS2013+WDK7600以及编写和调试第一个驱动
前言:环境搭建/编写/调试
参考文章:https://www.cnblogs.com/iBinary/p/8290595.html
相关环境资源下载
WDK7600 链接:https://pan.baidu.com/s/16BvhbmaJTQZ0HFv6dDVKCQ 提取码:e757
VS2013 链接:https://pan.baidu.com/s/1XWBEmLL3U3p4fpGOVGNVOw 密码:deb9
驱动环境搭建
WDK7600环境变量配置
配置相关WDK7600的目录
打开VS2013,新建空项目
文件 -> 新建 -> 常规 -> 空项目 -> 新建main.cpp
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint(("hello zpchcbd \n")); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
新建配置项
生成 -> 配置管理器
配置生成后缀名
项目 -> 属性 -> 常规 -> 目标文件扩展名为.sys
配置目录
项目 -> 属性-> VC++目录
配置相关源目录以及库文件
可执行的配置路径:
D:\WinDDK\7600.16385.1\bin\x86\x86
包含目录的配置路径:
D:\WinDDK\7600.16385.1\inc\ddk
D:\WinDDK\7600.16385.1\inc\api
D:\WinDDK\7600.16385.1\inc\crt
引用目录的配置路径:
D:\WinDDK\7600.16385.1\lib\ATL\i386
D:\WinDDK\7600.16385.1\lib\Crt\i386
D:\WinDDK\7600.16385.1\lib\wxp\i386
库目录的配置路径:
D:\WinDDK\7600.16385.1\lib\wxp\i386
设置优化属性
项目 -> 属性 -> C/C++ -> 优化
设置预处理器
项目 -> 属性->C/C++ -> 预处理器
_X86_;_DDK_;_WIN32_WINNT=0x0501;WINVER=0x0501;_DEBUG;DBG=1
配置项目属性
ntoskrnl.lib;ndis.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib
驱动部署运行
驱动的开发流程:编写代码->生成.sys文件->部署->启动->停止->卸载
上面都弄好了,这里进行编译测试,结果如下
那么这里就开始部署了,这里部署的话需要用到driver-manager,DebugView来进行调试。
将生成的sys驱动文件部署到driver-manager进行测试,如下图所示
驱动调试
什么是PDB文件
-
PDB文件是在我们编译工程的时候产生的,它是和对应的模块(exe或dll)一起生成出来的。
-
每个模块编译的时候都可以生成自己的PDB文件。比如.exe/.dll/.sys等等。
知识点:
1、如果你在项目属性中开启调试的话,那么编译器会生成对应的PDB文件,这样比如IDA进行分析的时候,都会选择是否导入相关的PDB来进行分析的
2、符号表其实也就是PDB文件
如何调试自己的驱动程序
.c文件的测试代码:
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint(("hello zpchcbd \n")); __asm { int 3; mov eax, eax; mov ebx, ebx; mov ecx, ecx; } Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
我们一般Windbg进行分析的时候,都会导入系统DLL相关的符号表,操作如下
SRV*D:\Symbols\XP*http://msdl.microsoft.com/download/symbols .reload
那么在Windbg中想要进行调试自己编写的驱动文件的话,那么首先需要的就是有对应生成文件的符号表所在的目录,然后再进行导入操作即可,Windbg会自己寻找当前目录下的符号表
SRV*D:\Symbols\XP*http://msdl.microsoft.com/download/symbols;D:\Visual_Studio_Repos_2013\WinDriver\WinXpDriver .reload
IDA反汇编驱动文件
将生成的第一个驱动文件拖进ida来进行查看
上面的图中可以发现入口函数是DriverEntry,但是在看雪中看到的帖子别人是这样说的,他说的是“在IDA中可以看到驱动真正的入口点函数是GsDriverEntry”,这个我自己没有发现,可能遗漏了什么操作,之后知道了再来补上!
PS:我知道为什么没有看到GsDriverEntry,因为我的编译入口函数设置为DriverEntry,如果默认的话就是GsDriverEntry然后再接着才是DriverEntry
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY