彙編寫驅動——光速入門

標 題: 作 者: yangbostar
時 間: 2011-03-18,16:51:55
鏈 接: http://bbs.pediy.com/showthread.php?t=131002

彙編寫windows驅動非常簡單,只要有彙編基礎和用C寫驅動的能力即可。有了這兩樣基礎,我們距離用彙編驅動,只剩下一層窗戶紙,一戳就破。

一、準備軟件:Radasm    
    爲了快速入門,好的IDE是降低入門難度的有效手段。Radasm是我最爲鍾愛的一款軟件,第一次使用過它,我就果斷地將masm32刪除了。
   RadASM是一款著名的WIN32彙編編輯器,精通win32彙編的人對它應該不會陌生。支持MASM、TASM等多種彙編編譯器,提供優秀的IDE,自帶一個資源編輯器和一個調試器(OD)。擁有較強的工程管理功能,加之衆多插件的支持,使得它用彙編語言編寫Windows軟件變得得心應手。 

二、認識KmdKit   
   之所以能用Radasm編寫驅動,就是因爲它整合了KmdKit,它是由俄國人開發的,KmdKit的全稱是Kernel Mode Driver development Kit for assembly language programmers,即內核模式驅動程序彙編開發包,KmdKit中包括了用宏彙編編譯器開發驅動程序需要用到的所有東西。你也可以從http://www.wasm.ru/或者http://www.freewebs.com/four-f/下載到最新版本的KmdKit。

三、彙編驅動的基本框架

.386
.model flat, stdcall
option casemap:none

.data

.code
;;;DriverEntry這個入口函數還是老樣子
DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING

        ret

DriverEntry endp

end DriverEntry  ;;;這裏和用戶模式有點不同

四、可供使用的系統調用庫    
    KmdKit開發包提供的inc和lib庫文件都分別保存在“w2k”“wnet”和“wxp”三個的文件夾裏,其大部分內容都在w2K裏。對應的,Radasm也在masm32文件夾中的Include和Lib文件夾裏,也分別保存了這三個文件夾。
    
    另外,有一個特別值得注意的問題,當Radasm引用以上三個文件夾裏lib文件時,要使用絕對路徑,爲什麼必須要這樣我也不清楚,如果有明白這個問題的朋友,也請你告訴我。
五、示例
.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                    ;DbgPrint 是調試狀態下的打印函數
    add  esp,4
    
    mov  eax,pDriverObject
    mov [eax+34H],offset DriverUnloadProc ;;xp裏pDriverObject.DriverUnload   
    mov eax,STATUS_SUCCESS
    ret

DriverEntry endp

DriverUnloadProc proc  DriverObject:PDRIVER_OBJECT
    push offset Unload_Str
    call DbgPrint
    add  esp,4
    ret
DriverUnloadProc endp
end DriverEntry

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章