登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 28|回复: 0

驱动开发与系统原理01-驱动中的HelloWorld

[复制链接]

56

主题

-7

回帖

66

积分

网站编辑

积分
66
发表于 4 天前 | 显示全部楼层 |阅读模式

万事万物起源于Hello World,这节讲述如何在驱动中打印Hello World.

实验

我们现在开发的是NT驱动,属于一种老驱动,现在和WDM驱动合并了

直接点击创建驱动,首先把Driver Files的inf文件删除,因为我们写NT式驱动没用,可能会产生报错

我们先配置一下

驱动比较严格,对于很多警告会视为错误,就会编译不过去,我们直接关闭就行了

这个选项得看我们开发哪个平台下的驱动,一定不能弄混,Win7下安装Win10驱动会发生蓝屏,我们先以Win7作为实验,所以把OS_Version改为Win7

        #include<ntifs.h> //与3环下的include一样,得包头文件
        //使用wdm.h ntddk.h一样

        //main 三环下主函数入口
        //WinMain 三环下窗口入口

        //UNICODE_STRING
        //ANSI_STRING 

        // 64位 
        //PG SSDT GDT ntos
        //DES 强制签名


        VOID DriverUnload(PDRIVER_OBJECT pDriver) {//正常的驱动程序安装后需要有卸载函数
          UNREFERENCED_PARAMETER(pDriver);//对没引用的参数进行处理
          DbgPrint("Unload success!\n");
        }


        NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) {//驱动对象指针,注册表路径 注意DriverEntry不能改成其他名字
          UNREFERENCED_PARAMETER(pRegPath);//对没引用的参数进行处理
          pDriverObject->DriverUnload = DriverUnload;//对pDriverObject中的DriverUnload进行赋值,否则不知道怎么卸载
          DbgPrint("Hello World!\n ");//打印
          //KdPrint(())
          return STATUS_SUCCESS;//状态成功为0,一定要有返回值
        }

然后生成就行了

sys为驱动程序,pdb为符号文件,cer为证书,现在我们去32位Win7进行安装

安装成功

注意

在x64下存在两种安全机制

PG:保护SSDT、GDT、ntos,如果我们对这些进行修改,就会触发PG,从而导致蓝屏

DES:强制签名

ed nt!kd_fusion_mask 0 //关闭Windbg的日志刷新

如果全程使用API编程,我们不要考虑修改,但是如果我们对一些结构比如SSDT等进行操作,就得自己手动修改

调试

DbgBreakPoint其实也是对int 3的封装

我们重新编译,安装,运行驱动,直接断下来了

在Windbg中我们通过一些指令可以进行调试

F9:下断点 F10:单步步过 F11:单步步进 Shift+F11:跳出函数

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-1-24 19:23 , Processed in 0.048724 second(s), 26 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表