首页 > 代码库 > Ring0级的探索
Ring0级的探索
内核基础知识介绍:
内核概述:Interx86系列处理器使用“环”的概念实施访问控制,共4个权限级别。一般情况下,操作系统的内核程序、驱动程序等都在Ring0级别上运行。研究内核漏洞,需要首先掌握一些内核基础知识、例如内核驱动程序的开发、编译和运行,以及内核中重要的数据结构等。
驱动编写之Hello World
代码,保存为Helloworld.c 路径 D:\0day\HelloWorld\helloworld.c
#include <ntddk.h> #define DEVICE_NAME L"\\Device\\HelloWorld" #define DEVICE_LINK L"\\DosDevices\\HelloWorld" // 创建的设备对象指针 PDEVICE_OBJECT g_DeviceObject; // 驱动卸载函数 VOID DriverUnload(IN PDRIVER_OBJECT driverObject){ // 什么都不用做,打印一句话,helloword就这套路 KdPrint(("DriverUnload: 88!\n")); } // 驱动派遣例程函数 NTSTATUS DrvDispatch(IN PDEVICE_OBJECT driverObject, IN PIRP pIrp){ KdPrint(("Enter DrvDispatch\n")); // 设置IRP的完成状态 pIrp->IoStatus.Status = STATUS_SUCCESS; // 设置IRP的操作字节数 pIrp->IoStatus.Information = 0; // 完成IRP处理 IoCompleteRequest(pIrp, IO_NO_INCREMENT); return STATUS_SUCCESS; } // 驱动入口函数(相当于main函数) NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING registryPath){ NTSTATUS ntStatus; UNICODE_STRING devname; UNICODE_STRING symLinkName; int i; // 打印一句调试信息 KdPrint(("DriverEntry: Hello world driver demo!")); // 设置该驱动对象的卸载函数 //driverObject->DriverUnload = DriverUnload; // 创建设备 RtlInitUnicodeString(&devname, DEVICE_NAME); ntStatus = IoCreateDevice(driverObject, 0, &devname, FILE_DEVICE_UNKNOWN, 0, TRUE, &g_DeviceObject); if (!NT_SUCCESS(ntStatus)) { return ntStatus; } // 创建符号链接 RtlInitUnicodeString(&symLinkName, DEVICE_LINK); ntStatus = IoCreateSymbolicLink(&symLinkName, &devname); if (!NT_SUCCESS(ntStatus)){ IoDeleteDevice(g_DeviceObject); return ntStatus; } // 设置该驱动对象的派遣例程函数 for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){ driverObject->MajorFunction[i] = DrvDispatch; } // 返回成功结果 return STATUS_SUCCESS; }
安装WDK
Ring0级的探索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。