Windows Kernel - basic

<本篇適合不懂or不熟悉Windows kernel的朋友>


今天來分享一下我所知的Windows kenel,首先先從簡單的開始
一般來說都是見到類似這樣的圖


 今天要講的是對於這個圖,再深入"一點點"剖析

從上而下說明
首先在user mode的部分

在user mode的最底層一般來說是NTDLL.dll,也就是你呼叫的win32 API,最後都是會到這裡(如果是需要到進到kernel的,那至於哪些不需要進到kernel呢?!下回分解~)。
NTDLL.dll基本上做兩件事,
    1.把你要呼叫的函數資訊填到register 
    2.引發中斷,進入kernel
再來就是kernel的事情了~

接下來是windows subsystem
有人可能有看過windows subsystem在NTDLL.dll上面,或是跟NTDLL.dll是平行的(就是沒有上下關係的),阿到底那個是對的呢?! 這個問題困惑我很久,看過wiki和"Windows核心原理與實務開發",可以知道subsystem是有直接跟底層接觸的,然後再透過depends,可以確認subsystem跟NTDLL.dll也是有相依性的,故可得上圖,就是兩個狀況都是有的。(等windbg技巧高一點後,直接attach去kernel看看)

再來說kernel mode的部分
一般所說的windows kernel,所指的就是ntoskrnl.exe這個檔案,而裡面分兩層
    1.executive(執行層) 
    2.(micro) kernel((微)核心)
Executive裡面有很多元件,今天就只提基本的部分。承接上面,NTDLL把函數資訊填到reigster後,trigger中斷轉換到kernel,接下來,kernel這邊就由executive層裡的"system service dispatcher"接手,dispatcher會根據register裡存的值去"System Service Dispatch Table(SSDT)"找到相對應的函數的address,然後去呼叫函數。也就是說,NTDLL可能在register裡存"5"這個值,dispatcher 就從register找出"5"這個值,然後去SSDT找第5的位置的address,假設SSDT第5個位置是是NtCreaetFile,dispatcher就藉由SSDT找到NtCreateFile的function addr.,然後去呼叫。如圖:

講這麼多,就是"Dispatch Service"那塊,dispatch service不是正式名稱啦,這塊其實是在executive裡面,只是為了圖比較好表達,所以特別把他拉出來。
在微核心部分,負責排程、中斷和例外處理、同步機制等。
ntoskrnl大概就只提到這,裡面的元件與機制就是進階部分了。

在kernel裡面,還有一個Windows Subsystem,這個主要是負責視窗管理、圖形介面等,和user mode的subsystem是一整套的,只是dispatch 的動作統一由executive負責。
下面的HAL層就沒什麼好說的了,就是把關於硬體相關的程式都放在這個模組,讓上層的kernel可以是與硬體獨立的

參考資料
 http://en.wikipedia.org/wiki/File:Windows_2000_architecture.svg
 Windows核心原理與實務開發


留言

這個網誌中的熱門文章

What's New in Ethereum Serenity (2.0)

瑞士滑雪分享2 - 策馬特

動手實做零知識 - circom