多CPU下安全inline hook

本文介绍了从师父神牛的空间学习到的一种在多CPU环境下相对安全的内核级inline hook方法,源自《Rootkits:Subverting the Windows Kernel》一书。该方法通过向非当前CPU插入DPC并进行忙等待来实现。文章还探讨了Windows的IRQL(Interrupt Request Level)概念,以及DPC和APC在不同IRQL级别中的应用。
摘要由CSDN通过智能技术生成

去師父神牛的空間里看了下關於内核安全inline hook的討論,感覺受益匪淺,查閲資料后,得知了一種CPU中較爲安全的安裝鈎子的方法。
該代碼來自《Rootkits:Subverting the Windows Kernel》一書,原理是通過向所有非當前的CPU插入DPC,並且在DPC例程中實現忙等待,這是一種比較可愛的方法(PS:雖然我還是糾結于,如果其他CPU當前就已經在執行DPC那不是情況會非常複雜嗎。。。)
Windows使用軟件中斷優先級,稱爲IRQL(Interrupt Request Level,中斷請求級別),Windows定義IRQL的範圍是0~31,數字越大,優先級越高。處理器執行時,擁有一個當前的IRQL,當發生中斷時,如果中斷的IRQL大於當前IRQL,當前執行會被打斷,處理器轉向執行中斷代碼,然後再根據需要繼續執行。IRQL最低是PASSIVE_LEVEL(0),也就是被動級別,普通的綫程都運行于這個級別,正因為這個級別最低,所以可以被所有更高的IRQL的例程打斷。比PASSIVE_LEVEL高的是APC_LEVEL(1),通常是APC(Asynchronous Procedure Call,異步過程調用)的等級。然後是DISPATCH_LEVEL(2),,通常被用於DPC(Deferred Procedure Call,延遲過程調用)或者綫程的調度。3~26是設備IRQL,27-31是一些硬件的中斷。DPC一般用於處理一些需要高優先級,但是又不是非常緊急的事務,而APC一般適用於綫程異步通知。

 

下面是來自書上的代碼以及我寫的一些:

//Source code 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值