win2003下面顯示dbgprint的輸出內容

2021-04-01 21:17:06 字數 1971 閱讀 5588

大家都知道 driver studio 帶乙個 drivermonitor 的工具,能顯示程式裡面由 dbgprint 輸出的字串,這裡說說他的工作原理,本人也是初學者,不對的地方,請指教.

先說自己的平台環境,使用 win2003 build 3790 rtm 版,這個很重要,dbgprint 的實現在各個平台上是有差異的,這裡只是說以上平台的實現,因為我也沒有在其他平台上試過,所有下面的程式,如果您想執行的話,請您先看完這個文章,再動手,否則遇到 bugcheck ,別怪我沒有提醒.

先說 dbgprint 的實現,呼出 si , bpx ntoskrnl!dbgprint ,然後自己隨便寫個程式,只要能斷點到 dbgprint 函式就ok,可以看到他呼叫了 vdbgprintexwithprefix 函式,f8,step into 看到這個函式把輸入的字串 vnprintf 到乙個 local buffer 裡面,然後呼叫了 debugprint ,呼叫這個 debugprint 函式的引數有 3 個,後兩個可以不去研究,第乙個引數是乙個 string 變數的指標,這個變數構造在 kernel 棧裡面,他字串的 buffer 也是構造在 kernel 棧裡面, step into debugprint 函式,他也是簡單的呼叫 debugservice 函式,這個函式同樣是3個引數,第乙個 表示了 呼叫型別 1 = debugprint,還有其他的數值,比如用於 image load 等等,這裡我沒有詳細的研究,只是了解1 = debugprint,第二個引數是 string 變數的實際字串指標,第三個引數是字串的長度.記好這幾個引數,step into debugservice裡面,這個函式就是真正的實現所在了,可以看到,他把 呼叫型別放到了 eax 裡面,字元指標放入 ecx 裡面,字元長度放入 edx 裡面,然後執行了乙個 int 2d. idt 看看 2d 這個中斷指向的是 dbgmsg.sys,再看看這個檔案是屬於 driverstudio 的,看到這裡,你應該明白了,如果我們要獲取dbgprint輸出字串,只用替換掉 2d 這個中斷就ok了.這個也是 dbgmsg.sys 的做法,如果沒有安裝 driverstuido的話,這個中斷指向的是 ntoskrnl.exe 的 _kidebugservice.

總結下,我們要寫乙個新的中斷控制代碼,替換掉原來的中斷處理(當然要記得 jmp 到原來的處理函式裡面),在這個處理函式裡面,當 eax=1 的時候表示 這次是由 dbgprint 引起的,這個時候 ecx 指向了字串的首位址,edx 為字串的長度(這個資料基本可以不使用).這樣我們就截獲到了 dbgprint 的輸出了.剩下的就只是實現而已.至於中斷的修改,無非是 sidt 到 idtr 的值,索引 到 2d 中斷的入口,儲存,修改而已.

這裡我們就已經獲取到了輸出的字串.剩下乙個問題,怎麼把這個顯示出來,這個也簡單了,也就是乙個驅動和應用程式通訊的問題,實現方式多種多樣,用乙個最普通的方式就行了,用 event object,每當驅動獲取到了乙個字串,他就把乙個 event 設定成 signaled,應用程式 wait 在這個 event 上面,如果 event 變成 signaled,應用程式就 readfile 一下驅動,驅動就返回讀取到的字串...這裡的實現都是細節問題了,做成什麼樣子的完全看你自己的發揮.

到這裡就寫完了.放上源**.

編譯環境 vs.net 2003 + win2003.ifs.ddk

執行環境 windows 2003

首先用 drivermonitor 載入編譯出來的 dbgview.sys 檔案

然後執行 dbgmonitor就行了

**寫得很簡陋...我也是初學者..難免有錯的地方..請包涵..

再次宣告...**的執行環境入上...任何非以上環境的朋友請親自跟蹤 dbgprint 函式明白 傳人到 int 2d 的引數以後,再修改本**,以適合你自己的作業系統,切記....否則 bugcheck 引起的後果自負...起碼在 windows 2000 下面,這個**是不能執行的. xp 下面沒有測試過...

附件:2004-03-30_dbgview.rar

(254 k)

Win7下面安裝VS2003

1.安裝iis 7 具體操作參考 how to install asp.net 1.1 with iis7 on vista and windows 2008 2.在iis7上面安裝 frontpage擴充套件 具體參考 installing the frontpage server extensi...

Win2003下如何解除安裝集群

win2003下如何解除安裝集群 在預設情況下,群集服務 mscs 的檔案已經安裝在執行windows server 2003 企業版或windows server 2003 datacenter 版本的計算機上。在windows 的早期版本中,若要安裝群集服務需要在控制面板中的 新增 刪除程式 工...

Win2003下如何解除安裝集群

win2003下如何解除安裝集群 在預設情況下,群集服務 mscs 的檔案已經安裝在執行windows server 2003 企業版或windows server 2003 datacenter 版本的計算機上。在windows 的早期版本中,若要安裝群集服務需要在控制面板中的 新增 刪除程式 工...