丹东站,网站后台上传文章格式,视频网站如何建设,我的世界做皮肤网站驱动插入中断描述符示例代码
最近做实验#xff0c;每次在应用层代码写测试代码的时候都要手动挂一个中断描述符#xff0c;很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下#xff1a; 下面的代码是个架子#xff0c;用的时候找个驱动历程传递你要插…驱动插入中断描述符示例代码
最近做实验每次在应用层代码写测试代码的时候都要手动挂一个中断描述符很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下 下面的代码是个架子用的时候找个驱动历程传递你要插入的中断门描述符或者是函数地址进来然后在根据这个架子插入idt就可以了 样例代码如下
#include ntddk.h
#define NTSTRSAFE_LIB
#include ntstrsafe.h
#include intrin.hVOID Unload(PDRIVER_OBJECT pDriver) {KdPrint((unload));}typedef struct _IDTR {UINT16 limit;UINT16 base_low;UINT16 base_hight;
}IDTR, *PIDTR;
#define MAKE_WORD(a,b) ((a) (b 16))
#define MAKE_BASE(a) (DWORD32)(((a 32) 0x00000000ffff0000) ((a 0x000000000000ffff)))
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath) {NTSTATUS status STATUS_SUCCESS;pDriver-DriverUnload Unload;KdPrint((begin\r\n));// 获取idt表IDTR idtr { 0 };__sidt(idtr);KdPrint((idt base0x%x, limit0x%x\r\n, MAKE_WORD(idtr.base_low, idtr.base_hight), idtr.limit));// 构造中断描述符UINT64 new_idte 0x1234567812345678;// 寻找未使用的位置插入描述符PDWORD64 idteArr (PDWORD64)MAKE_WORD(idtr.base_low, idtr.base_hight);for (size_t i 0; i (idtr.limit 3); i){//这边可以根据类型或者是看里面村的是不是0x0然后直接插入//我这里懒得写了我的环境上8003f500的位置刚好能用if (MAKE_BASE(idteArr[i]) 0x0) {idteArr[i] new_idte;KdPrint((中断号0x%x, i));break;}}return status;
}