Windows驱动开发之双击调试

Windows驱动开发之双击调试
1)双击调试介绍
双击调试这个词很新奇对吧?咱们一直写Web或者桌面,脚本都是直接在IDE中调试,但是底层开发的时候咱们就不能这样来了。驱动运行在系统内核层,直接关联硬件与系统核心,写得稍有疏漏就会经常蓝屏,要是用物理机调试那可太可怕了,代码一点小问题就会导致系统崩溃,只能不停重启电脑排查问题,耗时又费力。而双击调试便是适配内核特性的调试方式,简单说就是通过两台机器配合,一台作为调试机运行待测试驱动,一台作为主机搭载调试工具,双击操作完成调试链路的快速建立,避开内核层直接调试的系统风险,还能精准捕捉驱动运行时的内核态错误,是驱动开发中排查问题,验证功能的核心手段。


2)驱动环境介绍
咱们这次开发中常用的双击调试环境为VS2022+VMWare+Win10+Windbg组合编译与调试全流程。之前还遇到一个有趣的客户,问我一个 C#开发的Demo是否支持VS2026,当时咱也一时不知怎么回答他哈哈哈。想来是客户很少写底层代码,对驱动开发的环境要求不了解,其实Microsoft官网明确标注了目前VS2026还不支持驱动开发,所以完全不用急着跟进 VS2026,现阶段VS2022仍是驱动开发,搭配虚拟机VMWare搭建的Win10 调试机,再结合Windbg调试工具,就能搭建出稳定的双击调试环境,既避免物理机蓝屏重启的麻烦,也能高效完成内核态的调试工作。


3)VMWare介绍
VMWare是搭建双击调试环境的核心载体,作为虚拟机软件,它能在主机中虚拟出独立的Win10调试机,完美规避物理机调试蓝屏重启的问题,驱动调试出错仅需重启虚拟机,不影响主机正常使用。同时它支持灵活配置虚拟机硬件与系统参数,可模拟不同运行环境,还能和VS2022+WinDbg无缝联动,实现调试链路的快速搭建,轻量易操作,是驱动开发中搭建调试机的首选工具,大幅提升调试效率。


4)Windbg介绍
WinDbg是微软官方的内核态调试利器,也是双击调试的核心工具。不同于应用层调试工具,它能深度穿透系统内核,精准捕获驱动运行时的蓝屏,死锁等内核态错误,还支持断点设置,内存查看、寄存器监控等核心调试操作。在VS2022+VMWare的环境中,WinDbg可远程连接虚拟机中的Win10调试机,实时监控驱动的执行流程,哪怕驱动代码引发蓝屏,也能通过它定位到具体出错的代码行,是驱动开发中排查内核层问题不可或缺的工具。


6)配置流程介绍
好咱们正式进入配置环节哦
1.先去官网把Win10下好
https://www.microsoft.com/en-us/software-download/windows10
2.VMWare也是官网下好,需要注册登录,下载如果慢记得使用小火箭
https://support.broadcom.com/group/ecx/free-downloads
3. 安装VMWare和window10的教程请看
https://www.bilibili.com/video/BV1eaF7zsEKE/?spm_id_from=333.1387.homepage.video_card.click
4.vs2022编写驱动需要注意在代码中加入KdBreakPoint函数,第一个写会有个错误记得按照下面修改
vs2022->propertys->c/c++->General->Treat Warnings As Errors -> No(/WX-)
5.按照视频教程先启动windbg并配置好调试串口,系统中msconfig配置并重启进去myos调试就行。
6.KmdManager加载编译好的sys就行,当遇到KdBreakPoint函数windbg就可以进入调试环节了。

7)测试代码
#include<ntddk.h>
VOIDDriverUnload(PDRIVER_OBJECTdriver);

#definePAGEDCODEcode_seg("PAGE")
NTSTATUSDriverEntry(INPDRIVER_OBJECTpDriverObject,
    INPUNICODE_STRINGpRegistryPath)
{
    //DbgBreakPoint();
    KdBreakPoint();
    DbgPrint("Hello,wewdkdirver\r\n");
    KdPrint(("Hello,wewdkdirverbyKdPrint\r\n"));

    DbgPrint("pRegistryPath:%wZ\r\n",pRegistryPath);

    pDriverObject->DriverUnload=DriverUnload;
    returnSTATUS_SUCCESS;
}

//Unloadfunction
VOIDDriverUnload(PDRIVER_OBJECTDriverObject)
{

    DbgPrint("Ourdriverisunloading\r\n");
    KdPrint(("OurdriverisunloadingbyKdPrint\r\n"));

}
 

其他案例请查看,aes解码,密钥123456789,密文U2FsdGVkX1/Bd4k8ZAij4D8oMKFwS3bBvmalzk3NT7UEJTw7/qemqhDLwG4nl9H9/nO3Xk0Ebmv0W50P9akHkb0F2ubxR31a6lldXh/T1P5UbUFht0mf2SUJwAKMq1bg

 

https://www.matools.com/encrypt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值