windows核心(一)
.sys放在
drivers
目錄下。執行在
r0層。
在wdk
的相應環境中,進行相應**目錄,
build.
乙個核心程式被看作乙個pe
格式的dll
,它是被
windows
整個核心呼叫的乙個
dll,一旦加裁,就成為核心的組成部分。所有的核心記憶體空間是共享的。核心程式崩潰,
windows
系統也就崩潰了。
driverentry是乙個核心程式的入口,以
system
程序名出現。
編寫核心的規則:
不能呼叫windows
應用層api
函式,而應用核心
api。
關於字串,記憶體處理,列印等,參見前面rtl
函式浮點數要特殊處理
在windows
中,不同型別裝置的驅動有不同的安裝方式,
ini檔案。非
「任何型別
」的驅動程式,當作服務安裝。(搜「」
,net start
服務名)
除錯windbg (
)我們用虛擬機器進行除錯vmware.
環境搭建:
1、虛擬機器中boot.ini
.......
multi(0)disk(0)rdisk(0)partition(1)\windows="windows server 2003, enterprise" /noexecute=optout /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\windows="windows server 2003, enterprise" /noexecute=optout /fastdetect /debug /debugport=com1 /baudrate=9600
2、設定虛擬機器
hardward > serial port > output to named pipe,添入:
3、windbg設定
windbg(本機中)的啟動引數:
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=9600,pipe
(整成快捷方式
)說明1
:在虛擬中在除錯模式下啟動
windows
後,馬上以以上引數啟動
windbg
說明2:我以指定波特率啟動
windbg
時老是提示我引數出錯,把指定波特項取消後可以成功。
4、設定**路徑和符號表位置,就可以除錯了。symbol file path
中,sys
的位置。多個路徑以分號隔開。
srv*c:\symbols*
(關於說明,可見:
)其它更進一步的關於彙編**的分析,見[6]
其它除錯如同vs
中。c++寫核心
需要自己寫new
操作符用ecx
傳遞this
指標物件的開頭部分就是虛函式表位址
父類和子類各有乙份虛函式表,沒有共公部分。在子類的虛函式表中,沒有過載的基類虛函式的位址和基類虛函式一樣,而過載後有自己獨特的位址。
參考[1]
[2]
[3 [4]
[5] windows驅動程式設計基礎教程
.doc
[6] 天書夜讀
-從組合語言到
windows
核心程式設計
()[7] windows ddk
推薦其它書籍
programming the micfosoft windows driver model:驅動開發
windows環境下的
32位組合語言程式設計:彙編學習
軟體除錯,張銀奎:軟體除錯
2 從組合語言到Windows核心程式設計筆記 2
核心執行緒 在驅動中生成的執行緒一般是系統執行緒。系統執行緒所在的程序名為 system ntstatus pscreatesystemthread out phandle threadhandle,in ulong desiredaccess,in pobject attributes objec...
1 從組合語言到Windows核心程式設計筆記 1
彙編部分 1 call 的本質相當於 push jmp,ret 的本質相當於 pop jmp。2 windows中,不管哪種呼叫方式都是返回值放在 eax中,然後返回。外部從 eax中得到值。3 ebp總是被我們用來儲存這個函式執行之前的 esp的值。4 把區域性變數區域初始化成全0cccccccc...
從機器語言到組合語言
機器語言是計算機唯一能接受和執行的語言。機器語言由二進位製碼組成,每一串二進位製碼叫做一條指令。一條指令規定了計算機執行的乙個動作。一台計算機所能懂得的指令的全體,叫做這個計算機的指令系統。不同型號的計算機的指令系統不同。指令通常由幾個位元組組成,第乙個位元組是操作碼,它規定了計算機要執行的基本操作...