用彙編寫windows驅動非常簡單,只要有彙編基礎和用c寫驅動的能力即可。有了這兩樣基礎,我們距離用彙編寫驅動,只剩下一層窗戶紙,一戳就破。
一、準備軟體:radasm
為了快速入門,好的ide是降低入門難度的有效手段。radasm是我最為鍾愛的一款軟體,第一次使用過它,我就果斷地將masm32刪除了。
radasm是一款著名的win32彙編編輯器,精通win32彙編的人對它應該不會陌生。支援masm、tasm等多種彙編編譯器,提供優秀的ide,自帶乙個資源編輯器和乙個偵錯程式(od)。擁有較強的工程管理功能,加之眾多外掛程式的支援,使得它用組合語言編寫windows軟體變得得心應手。
二、認識kmdkit
.386
.model flat, stdcall
option casemap:none
.data
.code
;;;driverentry這個入口函式還是老樣子
driverentry proc pdriverobject:pdriver_object,pusregistrypath:punicode_string
retdriverentry endp
end driverentry ;;;這裡和使用者模式有點不同
四、可供使用的系統呼叫庫
kmdkit開發包提供的inc和lib庫檔案都分別儲存在「w2k」「wnet」和「wxp」三個的資料夾裡,其大部分內容都在w2k裡。對應的,radasm也在masm32資料夾中的include和lib資料夾裡,也分別儲存了這三個資料夾。
另外,有乙個特別值得注意的問題,當radasm引用以上三個資料夾裡lib檔案時,要使用絕對路徑,為什麼必須要這樣我也不清楚,如果有明白這個問題的朋友,也請你告訴我。
更新:dustno告訴了我答案,radasm沒有註冊環境變數,不知道是不是僅僅是我的安裝包的問題,還是這個軟體根本沒有註冊環境變數,反正大家注意一下吧。
五、示例
.386
.model flat, stdcall
option casemap:none
include w2k/ntddk.inc
include w2k/ntoskrnl.inc
includelib d:/radasm/masm32/lib/w2k/ntoskrnl.lib ;;請填寫自己的絕對路徑
.data
hello_str db 'hello,world',0
unload_str db "driver has been unloaded",0
.code
driverentry proc pdriverobject:pdriver_object,pusregistrypath:punicode_string
push offset hello_str
call dbgprint
add esp,4
mov eax,pdriverobject
mov [eax+34h],offset driverunloadproc;;xp裡pdriverobject.driverunload
mov eax,status_success
retdriverentry endp
driverunloadproc proc driverobject:pdriver_object
push offset unload_str
call dbgprint
add esp,4
retdriverunloadproc endp
end driverentry
彙編寫驅動 光速入門
用彙編寫windows驅動非常簡單,只要有彙編基礎和用c寫驅動的能力即可。有了這兩樣基礎,我們距離用彙編寫驅動,只剩下一層窗戶紙,一戳就破。一 準備軟體 radasm 為了快速入門,好的ide是降低入門難度的有效手段。radasm是我最為鍾愛的一款軟體,第一次使用過它,我就果斷地將masm32刪除了...
linux驅動編寫(usb host驅動入門)
usb協議是乙個複雜的協議,目前涉及到的版本就有usb1.0,usb2.0,usb3.0。大家如果開啟kernel usb host目錄,就會發現下面包含了ohci,uhci,ehci,xhci,whci等多種形式的控制器驅動。那麼,對於我們這些不是很了解usb的開發人員,如何了解usb的 結構呢?...
linux驅動編寫(入門)
csdn 大牛 feixiaoxing 在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝置的請求拆分成乙個乙個的介面,呼叫驅動的設定進行配置就可以了。當然,至於驅動下面是怎麼實現那就要根據具體情況而定了。比如說,有的驅動是晶元廠商直接寫好的,假設晶元廠商提供了對應平台的...