整理下之前過驅動保護的學習,idt hook也是乙個經常用到的hook思路。
還是要用到inline hook進入到中斷函式位址進行jmp
//獲取idt表位址
//修改int3中斷函式
#include#include #ifdef __cplusplus
extern "c"
#endif
#pragma pack(push)
#pragma pack(1) //
typedef struct _idtr //idt基址
idtr,*pidtr;
typedef struct _idt_entry
idt_entry,*pidt_entry;//+3.offset_high<<16+offset_low //int 3 中斷處理函式位址
#pragma pack(pop) //#pragma pack(pop)
//********************==value**********===
ulong jmpaddr_int3proc_9;
//********************==value end**********===
ulong getidtaddr()
//獲取int3的入口函式
ulong getint3addr()
void __declspec(naked) myint3()
kdprint(("\n entry my int3proc \n"));
_asm
__asm
}//進行idt inline hook
void idthook()
}void __declspec(naked) int3hookcode()
}void idtunhook()
}
#include "miniddk.h"
#include "ssdt.h"
#include "idthook.h"
#pragma initcode
extern "c" ntstatus driverentry(pdriver_object pdriverobject,punicode_string b)
//**********===inlinehook***************===
//***************=ssdt hook***************===
//hook();
//***************=ssdt hook***************===
//***************===idt hook***************==
//test();
idthook();
//***************===idt hook***************==
return (1);
}#pragma pagecode
void ddk_unload(in pdriver_object pdriverobject)
//**********===inlinehook***************===
//***************===idt hook***************==
idtunhook();
//***************===idt hook***************==
//刪除驅動iodeletedevice()
iodeletedevice(pdriverobject->deviceobject);
//刪除符號鏈結iodeletesymboliclink(symlinkname);
rtlinitunicodestring(&symbolname,l"\\??\\djj_driversymbol");
iodeletesymboliclink(&symbolname);
kdprint(("驅動被解除安裝------------\n"));
}//initcode的**一最好放在cpp吧 畢初始化一次就消失了
#pragma initcode
ntstatus createmydriver(in pdriver_object pdriverobject)
pdevobj->flags |= do_buffered_io;
//建立符號鏈結 用iocreatesymliclink建立符號鏈結,建立成功返回 status_success; 建立不成功則呼叫
status = iocreatesymboliclink(&symbolname,&devname);
if(!nt_success(status))
return status_success;
}
大家參考著看吧,好久之前寫的,忘記的差不多了。當時是想著當框架用的。現在也可以。
修改的地方
void __declspec(naked) myint3()
kdprint(("\n entry my int3proc \n"));//這裡修改可以進行自己個人的行為
_asm
__asm}
驅動中斷程式設計
1.編寫乙個外部中斷 1.獲取外部中斷編號 int gpio to irq unsigned int gpio 功能 通過io口編號轉換成對應的外部中斷編號 引數 gpio 要獲取的io口編號 返回值 成功 中斷編號 失敗 einval 2.註冊中斷函式 int request irq unsign...
裝置驅動 中斷
1 關於裝置驅動中的中斷問題 作業系統為了使得快速裝置和慢速裝置合適工作,需要中斷來提高效率,乙個外設要使用乙個中斷就必須註冊中斷號,獲得跟這個中斷號相關的一些資源,並且在中斷發生的時候核心可以進行一些處理,例如 呼叫中斷處理例程來真正的處理裝置中斷。linux處理中斷的方式很大程度上與它在使用者空...
驅動互斥中斷
互斥機制 1 遮蔽中斷 2 原子操作 定義原子變數 atomic t v 初始化 atomic t v atomic init 0 操作atomic t v atomic init 1 open else release 自旋鎖使用 自旋鎖是忙鎖 系統開銷較大,為了減小系統開銷,需要減少等待時間而減...