Windows內核分析索引目錄:https://www.cnblogs.com/onetrainee/p/11675224.htmlhtml
逆向分析操做系統內核代碼至少須要具有兩項技能:編程
1、KPCR結構體介紹函數
2、KPCR結構體成員詳解ui
使用windbg的 kd _KPCR 命令來查看該結構體成員。this
kd > dt _KPCR
ntdll!_KPCR
+ 0x000 NtTib : _NT_TIB // 保存CPU經常使用的信息(好比異常處理函數鏈表、棧大小空間限制)
+ 0x01c SelfPcr : Ptr32 _KPCR // 指向自身,相似C++的this指針同樣,方便編程。
+ 0x020 Prcb : Ptr32 _KPRCB // 指向 + 0x120 PrcbData : _KPRCB 結構體,該結構體爲_KPCR的拓展,這麼作(而不是使用偏移)是爲了當其地址改變時也能正確找到。
+ 0x024 Irql : UChar
+ 0x028 IRR : Uint4B
+ 0x02c IrrActive : Uint4B
+ 0x030 IDR : Uint4B
+ 0x034 KdVersionBlock : Ptr32 Void
+ 0x038 IDT : Ptr32 _KIDTENTRY //IDT表 一個CPU一套
+ 0x03c GDT : Ptr32 _KGDTENTRY // GDT表 一個CPU一套
+ 0x040 TSS : Ptr32 _KTSS // TSS表 一個CPU一套
+ 0x044 MajorVersion : Uint2B
+ 0x046 MinorVersion : Uint2B
+ 0x048 SetMember : Uint4B
+ 0x04c StallScaleFactor : Uint4B
+ 0x050 SpareUnused : UChar
+ 0x051 Number : UChar // 當前CPU的編號
+ 0x052 Spare0 : UChar
+ 0x053 SecondLevelCacheAssociativity : UChar
+ 0x054 VdmAlert : Uint4B
+ 0x058 KernelReserved : [14] Uint4B
+ 0x090 SecondLevelCacheSize : Uint4B
+ 0x094 HalReserved : [16] Uint4B
+ 0x0d4 InterruptMode : Uint4B
+ 0x0d8 Spare1 : UChar
+ 0x0dc KernelReserved2 : [17] Uint4B
+ 0x120 PrcbData : _KPRCB // 該結構體很大,是對於_KPCR的拓展spa
1)_NT_TIB( + 0x000 NtTib ) 結構體介紹
kd > dt _NT_TIB
ntdll!_NT_TIB
+ 0x000 ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD // 在R0環的異常處理函數鏈表(R3環存儲的是R3環的異常處理函數鏈表)
+ 0x004 StackBase : Ptr32 Void // 棧基址
+ 0x008 StackLimit : Ptr32 Void // 棧大小顯示
+ 0x00c SubSystemTib : Ptr32 Void
+ 0x010 FiberData : Ptr32 Void
+ 0x010 Version : Uint4B
+ 0x014 ArbitraryUserPointer : Ptr32 Void
+ 0x018 Self : Ptr32 _NT_TIB // this指針指向結構體本身
操作系統
2)_KPRCB 結構體介紹 ( 位於 + 0x120 PrcbData : _KPRCB,同時 + 0x020 Prcb : Ptr32 _KPRCB 又指向)
線程
該結構體上千字節,這裏僅節選部分有用的。 指針
kd > dt _KPRCB
ntdll!_KPRCB
+ 0x000 MinorVersion : Uint2B
+ 0x002 MajorVersion : Uint2B
+ 0x004 CurrentThread : Ptr32 _KTHREAD // 當前CPU正在跑的線程
+ 0x008 NextThread : Ptr32 _KTHREAD // 一會切換的切換的是誰
+ 0x00c IdleThread : Ptr32 _KTHREAD // 若是沒有程序運行,跑的空閒線程是誰
+ 0x010 LegacyNumber : UChar
+ 0x011 NestingLevel : UChar
+ 0x012 BuildType : Uint2B
+ 0x014 CpuType : Charhtm