查看IDT的驱动

操作系统 实验1 GDT表分析+驱动调试 1.GDT表分析:给定段选择子0x23,分析对应的段描述符中相关属性取值:G/P/TYPE三种,并描述TYPE赋值的语义。 段选择子是什么? 引用GDT和LDT中的段描述符所描述的段,是通过一个16-bit的数据结构来实现的,这个数据结构叫做Segment Selector——段选择子。它的高13位作为被引用的段描述符在GDT/LDT中的下标索引,bit 2用来指定被引用段描述符被放在GDT中... 阅读详情


#include <ntddk.h>
#include <stdio.h>

#if DBG
#define dprintf DbgPrint
#else
#define dprintf
#endif

#define kprintf DbgPrint

#define NT_DEVICE_NAME L"//Device//GDTDump"
#define DOS_DEVICE_NAME L"//DosDevices//GDTDump"

#define MAKELONG(a,b) ((unsigned long) (((unsigned short) (a)) | ((unsigned long) ((unsigned short) (b))) << 16))

#include "GDTDump.h"

NTSTATUS
GdtdumpDispatchCreate(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 );

NTSTATUS
GdtdumpDispatchClose(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 );

NTSTATUS
GdtdumpDispatchDeviceControl(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 );

VOID
GdtdumpUnload(
 IN PDRIVER_OBJECT DriverObject
 );

NTSTATUS
DriverEntry(
 IN PDRIVER_OBJECT DriverObject,
 IN PUNICODE_STRING RegistryPath
 )
{
 NTSTATUS ntStatus;
    PDEVICE_OBJECT DeviceObject = NULL;
    UNICODE_STRING ntDeviceName, dosDeviceName;
    PDEVICE_EXTENSION DeviceExtension;
 BOOLEAN fSymbolicLink = FALSE;

    dprintf("[GDTDump] DriverEntry: %S/n", RegistryPath->Buffer);

    //
    // A real driver would:
    //
    //     1. Report it's resources (IoReportResourceUsage)
    //
    //     2. Attempt to locate the device(s) it supports

    //
    // OK, we've claimed our resources & found our h/w, so create
    // a device and initialize stuff...
    //

    RtlInitUnicodeString(&ntDeviceName, NT_DEVICE_NAME);

    //
    // Create an EXCLUSIVE device, i.e. only 1 thread at a time can send
    // i/o requests.
    //

    ntStatus = IoCreateDevice(
  DriverObject,
  sizeof(DEVICE_EXTENSION), // DeviceExtensionSize
  &ntDeviceName, // DeviceName
  FILE_DEVICE_GDTDUMP, // DeviceType
  0, // DeviceCharacteristics
  TRUE, // Exclusive
  &DeviceObject // [OUT]
  );

    if (!NT_SUCCESS(ntStatus))
 {
  dprintf("[GDTDump] IoCreateDevice=0x%x/n", ntStatus);
  goto __failed;
 }

 DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;

 //
 // Set up synchronization objects, state info,, etc.
 //

    //
    // Create a symbolic link that Win32 apps can specify to gain access
    // to this driver/device
    //

    RtlInitUnicodeString(&dosDeviceName, DOS_DEVICE_NAME);

    ntStatus = IoCreateSymbolicLink(&dosDeviceName, &ntDeviceName);

    if (!NT_SUCCESS(ntStatus))
    {
        dprintf("[GDTDump] IoCreateSymbolicLink=0x%x/n", ntStatus);
  goto __failed;
    }

 fSymbolicLink = TRUE;

    //
    // Create dispatch points for device control, create, close.
    //

    DriverObject->MajorFunction[IRP_MJ_CREATE]         = GdtdumpDispatchCreate;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]          = GdtdumpDispatchClose;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = GdtdumpDispatchDeviceControl;
    DriverObject->DriverUnload                         = GdtdumpUnload;

    if (!NT_SUCCESS(ntStatus))
  goto __failed;

    return ntStatus;

__failed:

 if (fSymbolicLink)
  IoDeleteSymbolicLink(&dosDeviceName);

 if (DeviceObject)
  IoDeleteDevice(DeviceObject);

 return ntStatus;
}

NTSTATUS
GdtdumpDispatchCreate(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 )
{
 NTSTATUS ntStatus;

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;

 dprintf("[GDTDump] IRP_MJ_CREATE/n");

    ntStatus = Irp->IoStatus.Status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return ntStatus;
}

NTSTATUS
GdtdumpDispatchClose(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 )
{
 NTSTATUS ntStatus;

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;

 dprintf("[GDTDump] IRP_MJ_CLOSE/n");

    ntStatus = Irp->IoStatus.Status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return ntStatus;
}

NTSTATUS
GdtdumpDispatchDeviceControl(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp
 )
{
 NTSTATUS ntStatus;
    PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
    PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
    PVOID lpInOutBuffer;
    ULONG nInBufferSize, nOutBufferSize, dwIoControlCode;

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;

    //
    // Get the pointer to the input/output buffer and it's length
    //

    lpInOutBuffer = Irp->AssociatedIrp.SystemBuffer;
    nInBufferSize = IrpStack->Parameters.DeviceIoControl.InputBufferLength;
    nOutBufferSize = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;

    dprintf("[GDTDump] IRP_MJ_DEVICE_CONTROL/n");

    dwIoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;

    switch (dwIoControlCode)
    {
 case IOCTL_GDTDUMP_HELLO:
  {
   IDTINFO  idt_info;
   IDTENTRY* idt_entries;
   unsigned long count;
   _asm   sidt idt_info
   
   idt_entries=(IDTENTRY*) MAKELONG(idt_info.LowIDTbase,idt_info.HiIDTbase);
   for(count=0;count<= 256;count++)
   {
    char _t[255];
    IDTENTRY * i=&idt_entries[count];
    unsigned long addr=0;
    addr=MAKELONG(i->LowOffset,i->HiOffset);
    _snprintf(_t,253,"Interrup %d:ISR 0x%80x",count,addr);
    DbgPrint(_t);
   }
   
   //
   // Some app is saying hello
   //

            break;
  }

    default:
        Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

        dprintf("[GDTDump] unknown IRP_MJ_DEVICE_CONTROL/n");

        break;
 }

    //
    // DON'T get cute and try to use the status field of
    // the irp in the return status.  That IRP IS GONE as
    // soon as you call IoCompleteRequest.
    //

    ntStatus = Irp->IoStatus.Status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    //
    // We never have pending operation so always return the status code.
    //

    return ntStatus;
}

VOID
GdtdumpUnload(
 IN PDRIVER_OBJECT DriverObject
 )
{
    UNICODE_STRING dosDeviceName;

 //
    // Free any resources
    //

    //
    // Delete the symbolic link
    //

    RtlInitUnicodeString(&dosDeviceName, DOS_DEVICE_NAME);

    IoDeleteSymbolicLink(&dosDeviceName);

    //
    // Delete the device object
    //

    IoDeleteDevice(DriverObject->DeviceObject);

    dprintf("[GDTDump] unloaded/n");
}

 

新手小白 必须知道的嵌入式研发“IDT” !!!最强文章解析来袭!!! 摘要: IDT(中断描述符表)是嵌入式系统中管理异步中断事件的核心机制,通过映射表将中断号与处理函数关联,实现高效调度与响应。文章从IDT的定义、结构及工作原理出发,结合x86操作系统启动、RTOS异常管理及智能家居动态扩展等案例,分析其模块化、快速响应、安全隔离等优势,以及资源消耗、调试复杂等局限。探讨了理解IDT的抽象思维与软硬件协同方法,并给出初始化、ISR注册、优先级配置等实用技巧。最后指出IDT在AIoT时代支撑高实时性、可扩展系统中的关键价值,为嵌入式开发提供核心方法论。 阅读详情

相关推荐

[原创]NT系统信息察看工具 : NtInfoGuy

NT系统信息查看工具,GDT,IDT,SSDT,SSDTSDW,SYSMOD,SYSVAL

享受开发,颠倒银河 5475

一个 ARK工具: XueTr类似ICEWORLD

附上连接: XueTr0.19.zip (297.84 KB) | 下载链接 | XueTr0.19.zip linxer 大牛的BLOG: http://www.xuetr.com/ 本工具目前初步实现如下功能:1.进程、线程、进程模块、进程窗口信息查看,杀进程、杀线程、卸载模块等功能2.内核驱动模块查看,支持内核驱动模块的内存拷贝3.SSDT、Shadow SSDT、FSD、IDT信...

weixin_30344795的博客 274

IDT 92HD90BXX 声卡驱动 AppleHDA for OS X El Capitan 10.11.x

insanelyMac论坛下载的,似乎Dell和HP某些系列的笔记本用这个型号的声卡

windbg常用命令

!pool +va 可以分析出一个地址是不是通过ExAllocatePool分配的 以及是分页内存还是非分页内存 ba e1 +va 硬件断点 dps rsp 查看堆栈 会显示出相应的函数名 !pte + va 可以找出一个虚拟地址的pte 通过PTE知道这个地址读写以及可执行属性 !address +va 获得虚拟地址所在区域 .thread 列出当前线程结构体 !thread 当前线程信息 dt _KTHREAD TrapFrame+ 结构体地址 可以

qq_41490873的博客 1058

IDT 声卡驱动

IDT声卡XP驱动 不好找了

IDT声卡驱动

IDT声卡驱动

Windows系统安全分析:OpenArk如何帮你发现隐藏的威胁?

你是否曾经怀疑自己的Windows系统中有某些东西在暗中运行?电脑突然变慢,资源被莫名占用,或者杀毒软件总是什么都查不出来——这些情况可能意味着系统深处隐藏着难以察觉的恶意软件。OpenArk,这款开源的反Rootkit工具,就是为解决这类问题而生的。 想象一下,你正在使用电脑,突然发现一个陌生进程占用了大量CPU资源。传统的任务管理器只能告诉你进程名称和资源占用,但无法告诉你这个进程到底在做什

gitblog_00074的博客 377

矽玛特声卡IDT驱动唯一有效版

矽玛特声卡较为少见,但很多兼容驱动也可以安装,表现为有声音有输出,但麦克风无法使用,在声音的录音控制面板里会出现前麦克风和后麦克风两个选项,其实这是因为驱动错误导致的,这是一个正确的驱动,不会出现前麦克风和后麦克风的选项,麦克风就可以使用了。

OpenArk完整指南:Windows系统深度分析与安全检测的终极工具

OpenArk是一款功能强大的Windows开源反Rootkit工具,专为逆向工程师、安全研究人员和系统管理员设计。作为新一代的Anti-Rootkit(ARK)工具,OpenArk能够深入Windows系统内核层,提供进程管理、内核分析、系统回调监控等高级功能,帮助用户检测和清理恶意软件,是Windows系统安全分析的得力助手。 ## 🚀 快速上手:OpenArk核心功能一览 ### 核心

gitblog_00801的博客 147

idthighdefinitionaudiocodec驱动程序(惠普戴尔IDT声卡驱动)官方版

idt high definition audio codec驱动程序是一款支持戴尔和惠普笔记本电脑的一款万能声卡驱动程序,国内的朋友可能对IDT声卡比较陌生,不过假如你用的是戴尔和惠普笔记本,那么你的电脑上装备的就是这款IDT声卡驱动了。 注意事项 最新的IDT High Definition Audio高清音频解码器驱动,版本号为6.10.6499,适用于Win7以上系统,解压后点击setu

idt声卡驱动

idt声卡驱动

认识 IDT表

A、反断点的一些原理    B、认识IDT表    C、IDT表相关结构    D、读出IDT表-sidt指令    E、测试 一、反断点的一些原理     1、让他不能正常下断点 (0xCC断点int 3)     2、正常下断点后,让他不能断下(IDT HOOK) 二、IDT表 大小 00-0xFF ,0-255 返回 iretd ; 中断INT n 举个简单的例子 ...

crkres9527 3208

Silvaco Atlas(五)——物理模型总结

物理模型总结

qsz1425AWD2121的博客 2152

PCHunter初学习

一、PCHunter简介 PCHunter是一款功能强大的Windows系统信息查看软件,同时也是一款强大的手工杀毒软件,用它不但可以查看各类系统信息,也可以揪出电脑中的潜伏的病毒木马。 二、PCHunter功能 进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能 内核驱动模块查看,支持内核驱动模块的内存拷贝 SSDT、Shadow SSDT、FSD、KBD、TCPIP、Nsiproxy、Tdx、Classpnp、Atapi、Acpi、SCSI、IDT、GDT信息查看,并能检

qq_37954088的博客 1万+

EDA开源仿真工具verilator入门4:访问函数介绍

访问函数(Visitor Function)是verilator算法实现的主要工作方式之一,本节将介绍一下访问函数。

fangfanglovezhou的博客 1076

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7177

OpenArk:Windows系统安全的瑞士军刀

在Windows系统安全领域,一款真正强大且开源的工具往往能成为安全研究者的得力助手。OpenArk正是这样一款工具——它不仅是**下一代反Rootkit工具**,更是一个集成了进程分析、内核监控、逆向工程和系统调试于一体的综合性平台。作为一款完全开源的项目,OpenArk为安全研究人员、逆向工程师和系统管理员提供了从表层到内核的完整视角。 ## 核心理念:从被动防御到主动分析 传统的安全工具

gitblog_01193的博客 990

YOLOv11低照度增强主干网络PE-YOLO:原理与完整实现教程

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 727

3大核心突破:Windows系统深度分析工具OpenArk的实战应用指南

当你在Windows系统中遇到那些"看不见"的问题时,传统的任务管理器往往显得力不从心。进程莫名消失、系统变慢却找不到原因、怀疑有恶意软件却无从下手——这些正是OpenArk要解决的问题。作为一款开源的Windows系统安全分析工具,OpenArk提供了从进程管理到内核分析的完整解决方案,让系统分析变得直观而深入。🚀 ## 从实际问题出发:为什么你需要更强大的系统分析工具 想象一下这样的场景

gitblog_01126的博客 789

把 ABAP 接到外部世界的几条路, 从 Web Service 到 RFC、BAPI 与 IDoc 的完整理解

摘要: ABAP 的连接能力是其长期成为企业核心的关键,不仅支持通用协议(HTTP、SOAP、XML),还保留了 SAP 特有的技术(RFC、BAPI、IDoc)。Web Service 是跨系统通信的主轴,依赖 SOAP/WSDL 实现契约化协作,而 Enterprise Service 更强调业务语义的复用与治理。经典技术如 RFC 和 BAPI 因高效稳定仍广泛使用,尤其适合紧耦合场景。ABAP 通过分层工具箱(如代理生成、服务注册)实现灵活集成,平衡新旧技术,满足多样化的企业连接需求。 (字数:15

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 139

ardupilot 为什么要采样四元数姿态控制

本节主要说明清楚ardupilot姿态控制为什么要用到四元数,欢迎批评指正!!!

陌城烟雨 1118

IDTOWI驱动-STM32集成代码下载:单片机与IDT芯片通信利器

IDTOWI驱动-STM32集成代码下载:单片机与IDT芯片通信利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在嵌入式系统开发中,单片机与外部传感器或芯片的通信是一个基础且关键的部分。今天,我们要介绍的是一个专门针对STM32F103ZET6单片机开发的IDT OWI驱动集成代码下载项目。此项目为开发者提供了一套稳定的OWI(One-Wire Communica...

gitblog_06701的博客 844

基于STM32L4XX、HAL库的MCP4561数字电位器驱动程序设计

/ HAL库需要左移一位。* @param address: 设备地址(0x2C-0x2F)* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hi2c: I2C句柄。

zhusl6688的博客 340

遍历idt表_数组

#include "ntddk.h" #define WORD USHORT #define DWORD ULONG #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) \ | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) typedef str

812

【AUTOSAR SystemServices】AUTOSAR CP中Watchdog Manager模块技术解析

本文深入解析了AUTOSAR中的Watchdog Manager模块实现。该模块通过多层次监督机制(Alive/Deadline/Logical Supervision)确保系统安全运行,具备动态模式切换和分级故障处理能力。 关键实现包括: 数据结构设计:包含监督实体状态结构体(实时状态维护)、监督配置结构体(支持模式切换)和全局状态信息(系统级监控) 核心流程优化:初始化采用事务性设计,检查点处理通过条件编译优化,主监控循环采用流水线式并行处理 监督机制实现:Alive监督采用滑动窗口算法,Deadlin

1039

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

获取CPU每个核心的IDT信息

0x00 简介 记得2008年看保护模式的教程时,痛苦与那些众多的位信息等复杂的结构。 后来入这行,干了几年的驱动。 这是才对这些CPU基本的知识有点了解。 IDT,中断描述符表,这个基本的东西,岂能不会。 IDT HOOK的东西已经很多了,不过这里不是搞这个的(因为64位windows上是不建议的,除非...),而是检测IDT HOOK,向处理器虚拟化进军的。 ...

dog0230的博客 1250

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 网络游戏外挂制作之我所见(系列文档1-5)
下一篇: vc++ post http实现文件上传
basketwill
博客等级 码龄20年 78粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值