身為資訊保安專業的學生,接觸計算機也有十來的年頭了,到現在還沒有深入過windows核心的世界,不禁有些慚愧。所以現在開始認認真真沉下心來研究這個全新的世界,記些筆記,不但方便自己回頭翻閱,也希望可以和同樣研究驅動、核心的朋友們一起研究**。 首先向大家推薦一本好書《rootkits——windows核心的安全防護》,是乙個很好的驅動學習入門教材,雖然這裡的「驅動」僅指用於rootkit的驅動。網上很多驅動教程都是針對一定硬體的,對於初學者來說很多概念難以理解,而且沒有乙個入門的介紹,而這本書從零開始詳細介紹了驅動開發的過程,所以非常符合我的需求。
開始之前讓我們先把工具準備好吧,虛擬機器軟體、ddk、vc、其它小軟體。
開發驅動的過程中時常會遇到藍屏的情況。因為驅動程式執行在作業系統的核心,缺少保護,一旦出錯系統就會崩潰。所以為了避免頻繁重啟甚至重灌,使用虛擬機器是乙個很好的選擇,一旦有問題回滾到上一次的快照就可以完全恢復了。虛擬機器軟體使用的是vmware 6,在裡面安裝了server 2003 sp0,至於為什麼不安裝sp2是因為sp2和後面可能會用到的驅動除錯軟體softice存在相容性問題(雖然我暫時還沒用到它^_^),開機即會藍屏。
ddk的全稱是driver develop kit,是由微軟提供的驅動開發工具包,包含了驅動開發所需要的很多庫函式等,我用的ddk1830包含了2000、xp、server 2003的驅動開發包。
vc就不用多說了,雖然最終的編譯不在這個環境,但是ddk實際上是要用到vc編譯器的。我用的是vc6.0。
其他需要的是乙個叫instdrv.exe的小工具,以及安裝ddk後自帶的一些軟體,比如:devicetree。instdrv是用來在不重啟的情況下安裝/解除安裝/開始/停止驅動的工具,devicetree用來檢視系統中已經啟動的驅動程式。
工具準備好了,下次準備動手開發乙個最簡單的驅動,待續……
Linux驅動開發筆記(二)
linux驅動開發的基本框架 define led major 200 define led name led static int led open struct inode inode,struct file filp static int led release struct inode in...
測試驅動開發筆記(二) xUnit
1.防止改完後引起新錯誤 再次執行單元測試。2.如果單元測試涉及到可變資訊 如當前時間 需要將待測試資料也變為可變,否則無法回歸測試 3.使用測試驅動開發必須從頭開始,嚴格進行,否則到半中間會很費事的。4.測試驅動開發中,私有方法也要測試,可通過反射實現,如 summer example new s...
Linux驅動開發筆記 裝置驅動中的阻塞和同步機制
阻塞呼叫 呼叫結果返回之前,當前執行緒被掛起,函式只有在得到結果之後才會返回 非阻塞呼叫 在不能立即得到結果之前,該函式不會阻塞當前程序,而會立即返回 阻塞程序可以使用等待佇列來實現 等待佇列的基本資料結構是乙個雙向鍊錶,儲存睡眠的程序 等待佇列定義 struct wait queue head t...