当前位置: 首页 > news >正文

驱动插入中断门示例代码

驱动插入中断描述符示例代码

最近做实验,每次在应用层代码写测试代码的时候都要手动挂一个中断描述符,很不方便所以就想着写个驱动挂一个中断门比较省事
驱动测试效果如下:
在这里插入图片描述
在这里插入图片描述
下面的代码是个架子,用的时候找个驱动历程传递你要插入的中断门描述符或者是函数地址进来然后在根据这个架子插入idt就可以了
样例代码如下:

#include <ntddk.h>
#define NTSTRSAFE_LIB
#include <ntstrsafe.h>
#include <intrin.h>VOID 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 base=0x%x, limit=0x%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;
}
http://www.lryc.cn/news/179638.html

相关文章:

  • 1 论文笔记:Efficient Trajectory Similarity Computation with ContrastiveLearning
  • 如何做一个基于 Python 的搜索引擎?
  • Python报错:KeyError: ‘820‘
  • 【kubernetes】kubernetes中的Deployment使用
  • 百度2024校招机器学习、数据挖掘、自然语言处理方向面试经历
  • RabbitMQ原理(二):SpringAMQP编程
  • 什么是SQL注入(SQL Injection)?如何预防它
  • metrology
  • UE学习记录06----根据Actor大小自适应相机位置
  • Go-Python-Java-C-LeetCode高分解法-第八周合集
  • 数据结构--并查集
  • Leetcode 224. 基本计算器
  • Linux基础命令汇总
  • JAVA 获得特定格式时间
  • 问题: 视频颜色问题,偏绿
  • 智能文字识别技术——AI赋能古彝文保护
  • Linux压缩和解压命令大全:tar、gzip和zip完整教程
  • Vue3 reactive和ref详解
  • jvs-rules(规则引擎)和jvs智能bi(自助式数据分析)9.22更新内容
  • Leetcode算法题练习(一)
  • Xilinx FPGA 7系列 GTX/GTH Transceivers (5)-- Aurora 8b10b 信号传输实战--小试牛刀
  • 第三章:最新版零基础学习 PYTHON 教程(第七节 - Python 运算符—Python 成员身份和身份运算符)
  • 【Java 基础篇】Java 注解详解
  • MVVM框架下两窗口的消息传递
  • ROS2 从头开始​​:第6部分 - ROS2 中的 DDS,用于可靠的机器人通信
  • WebSocket的那些事(6- RabbitMQ STOMP目的地详解)
  • SQL SELECT 语句基础
  • golang工程——protobuf使用及原理
  • CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明
  • 免费 AI 代码生成器 Amazon CodeWhisperer 初体验