EPROCESS ETHREAD简介
文章目錄
- 聲明
- EPROCESS(0環(huán))中的KPROCESS主要成員介紹:
- EPROCESS其它成員介紹:
- EPROCESS補充:
- ETHREAD簡介
- ETHREAD成員中_KTHREAD:
- ETHREAD其它成員:
聲明
這個是0環(huán)的EPROCESS,并非3環(huán)的PEB
EPROCESS(0環(huán))中的KPROCESS主要成員介紹:
1 .+0x000 Header:_DISPATCHER_HEADER
“可等待對象”,比如Mutex互斥體,Event事件等(WaitForSingleObject)
2.+0x018 DirectoryTableBase:[2]Unit4B
頁目錄表的基址(這個值最終會填在Cr3寄存器中)(所謂進程切換就是切換Cr3的值)
3.+0x038 KernelTime : Unit4B
+0x03c UserTime:Unit4B
統(tǒng)計信息,記錄了一個進程在內(nèi)核模式/用戶模式下所花的時間
4 .+0x05c Affinity :Unit4B(32位中4字節(jié)(即最多32核))
規(guī)定進程里面的所有線程能在哪個CPU上跑,如果值為1,那這個進程的所有線程只能在0號CPU上跑(00000001)(最右邊是第0位)
如果值為3,那這個進程的所有線程能在0,1號CPU上跑(00000011)
如果值為4,那這個進程的所有線程能在2號CPU上跑(00000100)
如果值為5,那這個進程的所有線程能在0,2號CPU上跑(00000101)
4個字節(jié)共32位,所以最多32核
Windows64位就64核,
如果只有一個CPU把這個設(shè)置為4,那么這個進程就死了
+0x062 BasePriority:Char
基礎(chǔ)優(yōu)先級或最低優(yōu)先級,該進程中的所有線程最起始的優(yōu)先級
EPROCESS其它成員介紹:
1.0x070 CreateTime: _LARGE_INTEGER
0x070 ExitTime: _LARGE_INTEGER
2.+0x084 UniqueProcessId:Ptr32 Void
進程的編號,即任務(wù)管理的PID
3.0x088 ActiveProcessLinks:_LIST_ENTRY(斷掉的話,可以達到進程隱藏的目的)
雙向鏈表,所有的活動進程都連接在一起,構(gòu)成了一個鏈表
PsActiveProcessHead指向了全局鏈表頭
(注意:3環(huán)PEB里面有三個雙向鏈表,斷掉的話可以達到模塊隱藏的目的)
并未指向頭部,而是指向EPROCESS0x88的位置,所以一般都是(用所指向的地址-0x88)
4.+0x090 QuotaUsage:[3]Unit4B
+0x09c QuotaPeak:[3]Unit4B
物理頁相關(guān)的統(tǒng)計信息
5.+0x0a8 CommitCharge :Unit4B
+0x0ac PeakVirtualSize:Unit4B
+0x0b0 VirtualSize :Unit4B
虛擬內(nèi)存相關(guān)的統(tǒng)計信息
6.+0x11c VadRoot : Ptr32 Void
標(biāo)識0-2G哪些地址沒占用了
(指向了一棵平衡二叉樹,這棵二叉樹記錄了低2G的地址哪些是分配的,哪些是未分配的(當(dāng)在低2G申請地址時,首先查詢這棵樹,如果這個地址未在這棵樹中,就說明未分配,那這個線性地址就分配給你。如果這個地址在這棵樹中,那么這個線性地址就不能分配給你)和模塊隱藏有關(guān))
7.+0x0bc DebugPort : Ptr32 Void
(正常情況下,一個進程處于調(diào)試狀態(tài),這里會存儲一個值,這個值也是一個結(jié)構(gòu)體,這個結(jié)構(gòu)體作為被調(diào)試進程和調(diào)試器之間的橋梁,有了這個值呢,被調(diào)試進程和調(diào)試器就可以進行通信(避免被調(diào)試的話,就可以DebugPort清零))
+0x0c0 ExceptionPort:Ptr32 Void
調(diào)試相關(guān)
8.+0x0c4 ObjectTable :Ptr32_HANDLE_TABLE
句柄表(每個進程都有個句柄表,在零環(huán),這個句柄表中存儲了還用了哪些其它的內(nèi)核對象(例如在一個進程里面CreateThread))
(反調(diào)試手段:查其它進程的句柄表,如果在其它進程的句柄表中發(fā)現(xiàn)了進程結(jié)構(gòu)體的地址,也就是當(dāng)前自身EPROCESS的值,說明其它進程打開了自身,為什么被打開呢?也就是被調(diào)試了。。。。。)
9.+0x174 ImageFileName :[16]Uchar
進程鏡像文件名 最多16個字節(jié)
10.+0x1a0 ActiveThreads:Unit4B
活動線程的數(shù)量
11.0x1b0 : Ptr32 _PEB(三環(huán))
PEB(Process Environment Block 進程環(huán)境塊):進程在3環(huán)的一個結(jié)構(gòu)體,里面包含了進程的模塊列表,是否處于調(diào)試狀態(tài)等信息(也就是三環(huán)PEB的地址)
EPROCESS補充:
進程結(jié)構(gòu)體EPROCESS(0x50和0x190)是2個鏈表,里面圈著當(dāng)前進程所有的線程
對于進程斷鏈,程序可以正常運行,原因是CPU執(zhí)行與調(diào)度是基于線程的,進程斷鏈只是影響一些遍歷系統(tǒng)進程的API,并不會影響程序執(zhí)行
對于線程斷鏈也是一樣的,斷鏈后在Windbg或者OD中無法看到被斷的掉的線程,但不影響其執(zhí)行(仍然再跑)
ETHREAD簡介
線程結(jié)構(gòu)體ETHREAD
每個Windows線程在0環(huán)都有一個對應(yīng)的結(jié)構(gòu)體:ETHREAD這個結(jié)構(gòu)體包含了線程所有重要的信息
ETHREAD成員中_KTHREAD:
1.+0x000 Header :_DISPATCHER_HEADER
"可等待"對象,比如Mutex互斥體,Event事件等(WaitForSingleObject)
2.+0x018 InitialStack:Ptr32 Void
+0x01c StackLimit: Ptr32 Void
+0x028 KernelStack:Ptr32 Void
線程相關(guān)切換
3.0x020 Teb :Ptr32 Void
TEB,Thread Environment Block,線程環(huán)境塊
大小4KB,位于用戶地址空間
FS:[0]–>TEB(3環(huán)時,0環(huán)時FS執(zhí)行KPCR)
(0環(huán)結(jié)構(gòu)體給操作系統(tǒng)使用,3環(huán)結(jié)構(gòu)體給應(yīng)用程序使用)
4.+0x02c DebugActive :Uchar
如果值為-1不能使用調(diào)試寄存器:Dr0-Dr7
5.+0x034 ApcState :_KAPC_STATE
+0x0e8 ApcQueueLock :Uint4B
+0x138 ApcStatePointer :_KAPC_STATE
APC相關(guān)
6.+0x02d State :Uchar
線程狀態(tài):就緒,等待還是運行
7.+0x06c BasePriority :Char
其初始值是所屬進程的BasePriority值(KPROCESS---->BasePriority),以后可以通過KeSetBasePriorityThread()函數(shù)重新設(shè)定
8.+0x070 WaitBlock :[4]_KWAIT_BLOCK
等待哪個對象(WaitForSingleObject)
9.+0x0e0 ServiceTable:Ptr32 Void
指向系統(tǒng)服務(wù)表基址
10 . +0x134 TrapFrame
進0環(huán)時保存環(huán)境(當(dāng)程序從3環(huán)進入0環(huán)時,3環(huán)原來的寄存器的值所存儲的位置(TrapFrame結(jié)構(gòu)體)一個線程中有一個結(jié)構(gòu)體 )
11.+0x140 PreviousMode:Char
某些內(nèi)核函數(shù)會判斷程序是在0環(huán)調(diào)用還是3環(huán)調(diào)用的
12.+0x1b0 ThreadListEntry :LIST_ENTRY
雙向鏈表 一個進程所有的線程,都掛在一個鏈表中,掛的就是這個位置,一共有兩個這樣的鏈表
ETHREAD其它成員:
1 . 0x1ec Cid:_CLIENT_ID
進程ID,線程ID
2 . +0x220 ThreadsProcess:Ptr32_EPROCESS
指向自己所屬進程
3.+0x22c ThreadListEntry:_LIST_ENTRY
雙向鏈表,一個進程所有的線程,都掛在一個鏈表中,掛的就是這個位置,一共有兩個這樣的鏈表
總結(jié)
以上是生活随笔為你收集整理的EPROCESS ETHREAD简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 控制寄存器,CPU缓存,PWT,PCD
- 下一篇: KPCR:CPU控制区(Processo