3 從組合語言到Windows核心程式設計筆記 3

2022-02-12 18:38:16 字數 1929 閱讀 7349

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...

從機器語言到組合語言

機器語言是計算機唯一能接受和執行的語言。機器語言由二進位製碼組成,每一串二進位製碼叫做一條指令。一條指令規定了計算機執行的乙個動作。一台計算機所能懂得的指令的全體,叫做這個計算機的指令系統。不同型號的計算機的指令系統不同。指令通常由幾個位元組組成,第乙個位元組是操作碼,它規定了計算機要執行的基本操作...