Windows核心情景分析 概述

2021-08-22 08:44:24 字數 1654 閱讀 6049

現在的windows

現在的windows核心包含了兩大部分,一部分是本來意面上的作業系統核心,另一部分則是移到了核心中的視窗服務,前者對應ntoskrnl.exe後者win32k.sys;後者部分為了保證效率。windows作業系統包含多個子系統,最常用就是windows子系統;貌似現在的windows10提供了linux子系統,所以在windows上可以執行linux的程式。

現代意義上的作業系統

第一,作業系統的區域受到保護,不會因為使用者程式的錯誤而損壞,分使用者程式空間和核心空間,核心空間受到保護。

第二,不用應用程式之間互相防護,乙個程式的錯誤不影響另乙個應用程式。

第三,程式在物理記憶體中的位置可以浮動,允許多程式同時執行。

windows系統結構

windows作業系統分使用者空間和系統空間,32bitos 0~0x7fffffff屬於使用者空間,0x80000000~0xffffffff屬於作業系統空間。使用者空間屬於特定程序,核心空間是共享的;核心空間只有當cpu處於系統態才可以訪問,程序空間則都可以訪問。cpu通過三種方式進入系統態,分別為「系統呼叫」、「中斷」、「異常」。

windows irql

windows與linux核心不同,其核心相當一部分的頁面是可倒換的,但並非所有,例如中斷和異常的有關**和資料所在頁面,以及和頁面倒換相關**資料就是不可倒換。windows為cpu執行狀態定義了很多irql,在任一時間,cpu總是為其中某乙個級別,這個級別表名哪些操作可以做哪些操作不可以。基本意圖為,如果cpu處於某乙個級別,其操作就不能被低階別的操作所干擾。使用者空間無法更改irql,irql定義如圖:

接上,關注passive_level、apc_level、dispatch_level,級別 >= 3用於硬體中斷 。上面所說中斷和異常**資料所在頁面是不允許置換,可能因為:中斷處理內部不允許執行緒切換(具體原因?),所以無法切換到處理置換的執行緒(單獨核心執行緒處理該操作),而待執行的**又已經置換到磁碟上,無法置換入記憶體,所以這裡就行不通;此外,執行緒切換必須等到irql從dispatch_level降下來。在頁面置換問題上,只要cpu的irql級別不高於apc_level的層次,其**都是執行置換的,因為允許執行緒切換到核心負責置換的執行緒。在windows中管理層**中幾乎所有函式開頭放上巨集paged_code(),說明作者意圖該函式可置換,通過 #pragma alloc_text(page,ntqueryobejct)編譯時將**放在可置換區。

windows核心函式命名

了解命名規則對於後面理解函式有幫助,可以一眼看出該函式的大概作用。

windows 核心情景分析 說明

說明本文結合 windows核心情景分析 毛德操著 軟體除錯 張銀奎著 windows核心程式設計 寒江獨釣 windows核心安全程式設計 windows pe權威指南 c 反彙編與逆向分析揭秘 以及reactos作業系統 v0.3.12 原始碼,以 windows核心情景分析 為藍本,對wind...

《Windows核心情景分析》物件管理

物件的資料結構都是由物件頭和具體物件型別的資料結構兩部分組成。物件頭object header在下,它的上方是具體物件型別的資料結構本身。nt object header 0x000 pointercount int4b 0x004 handlecount int4b 0x004 nexttofre...

Windows核心情景分析 學習日誌之一

毛德操老師對核心的研究非常透徹,乙個小問題都能講得異常清晰,pfpf。系統呼叫 一般只有三種手段可以從使用者態進入核心態 1 中斷 interrupt 2 異常 exception 3 自陷 trap 4 快速系統呼叫 fastsystemcall pentium 2之後出現 5 呼叫門 x86系列...