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裡存的值去" S ystem S ervice D ispatch T able( SSDT )"找到相對應的函數的address...