驱动环境搭建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

posted @   zpchcbd  阅读(1067)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示