從subsystem開始概述NT核心

2021-08-22 01:20:51 字數 1682 閱讀 6917

什麼是subsystem?

nt架構(windows nt、windows xp、windows 2003)的初始設計是很有野心的,它希望在nt上可以不加修改地執行os2、unix程式。

所以在nt中有subsystem的概念,每個subsystem針對乙個平台,ntdll.dll是所有subsystem的基礎。或者說ntdll.dll統一提供nt系統的api介面,subsystem為各個平台的應用程式提供包裝。

在winnt.h中,對subsystem的定義如下:

#define image_subsystem_unknown 0 // unknown subsystem.

#define image_subsystem_native 1 // image doesn't require a subsystem.

#define image_subsystem_windows_gui 2 // image runs in the windows gui subsystem.

#define image_subsystem_windows_cui 3 // image runs in the windows character subsystem.

#define image_subsystem_os2_cui 5 // image runs in the os/2 character subsystem.

#define image_subsystem_posix_cui 7 // image runs in the posix character subsystem.

#define image_subsystem_native_windows 8 // image is a native win9x driver.

#define image_subsystem_windows_ce_gui 9 // image runs in the windows ce subsystem.

cui就是console ui了。我們使用的subsystem主要是3和2。

nt架構另乙個主要概念就是使用者態和核心態了。32位計算機的位址空間中,0x0-0x10000是保留的,然後0x80000000以下屬於使用者態,0x80000000以上屬於核心態。核心態管理所有硬體。使用者態不能使用核心態的任何東西。在核心態執行的程式,例如驅動程式,可以在系統中為所欲為,當然錯誤的後果會很嚴重。

我用win32dsm檢視了nt核心模組的匯入表,整理了它們之間的呼叫關係:

在使用者態看起來很底層的東西,例如win32 subsystem的核心:kernel32.dll、user32.dll、gdi32.dll,基本上只是ntdll.dll的乙個包裝,而ntdll.dll包裝了從使用者態到核心態的system call,也稱作「native system service」。

使用者態不能訪問核心態的任何函式和變數,所以system call不同於一般的api呼叫。system call可以被看作:將要呼叫的功能id放到eax,然後執行int 2e。

ntdll.dll通過system call使用核心態的ntoskrnl.exe和win32k.sys提供的功能。ntoskrnl.exe被尊稱為「executive」,可以看作是nt的大腦級模組。win32k.sys提供nt圖形庫介面的api。

hal(硬體抽象層)是nt硬體訪問的核心模組。

從開源開始

把程式 全部公開是非常符合人性。這大概因為人性是懶惰的。既然能夠用電腦完成,就不要用人來完成。但電腦還是需要人來控制。於是,有眾多的人辛辛苦苦地加入了程式設計師的行列裡。開源後程式設計師也可以懶一些,把除錯 和增加功能交給了大眾。同時獲益的也有大眾,他們可以不做出重複勞動了。是的,多好啊,他們可以不...

web程式概述 開始Web開發 概述

web程式概述 本條目試圖以點的形式總結我在過去兩年中涉及的與基本web開發有關的各種主題,並在適當時包括指向相關條目的鏈結。如果您是出於學習目的或從頭開始製作網頁而使用此部落格,則可能是開始的地方。後面將是 開始css web開發 create a basic html document 建立乙個...

css 獲取從第n個開始之後的所有元素

具體 如下所示 等待獲取 等待獲取 等待獲取jdxgw 程式設計客棧div 現要獲取box中,除了第乙個之外的其他的div box div nth of type n 2 其中n後jdxgwa面的數字,是幾就是從第幾個開始獲取。例子中從第二個div開始獲取,所以是 n 2 總結以上所述是小編給大家介...