驅動程式設計 idt hook 中斷描述符表

2021-07-11 14:34:26 字數 2596 閱讀 5299

整理下之前過驅動保護的學習,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 自旋鎖使用 自旋鎖是忙鎖 系統開銷較大,為了減小系統開銷,需要減少等待時間而減...