日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EPROCESS ETHREAD简介

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EPROCESS ETHREAD简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 聲明
    • EPROCESS(0環)中的KPROCESS主要成員介紹:
    • EPROCESS其它成員介紹:
    • EPROCESS補充:
    • ETHREAD簡介
    • ETHREAD成員中_KTHREAD:
    • ETHREAD其它成員:

聲明

這個是0環的EPROCESS,并非3環的PEB

EPROCESS(0環)中的KPROCESS主要成員介紹:

1 .+0x000 Header:_DISPATCHER_HEADER
可等待對象”,比如Mutex互斥體,Event事件等(WaitForSingleObject)

2.+0x018 DirectoryTableBase:[2]Unit4B
頁目錄表的基址(這個值最終會填在Cr3寄存器中)(所謂進程切換就是切換Cr3的值)

3.+0x038 KernelTime : Unit4B
+0x03c UserTime:Unit4B
統計信息,記錄了一個進程在內核模式/用戶模式下所花的時間

4 .+0x05c Affinity :Unit4B(32位中4字節(即最多32核))
規定進程里面的所有線程能在哪個CPU上跑,如果值為1,那這個進程的所有線程只能在0號CPU上跑(00000001)(最右邊是第0位)
如果值為3,那這個進程的所有線程能在0,1號CPU上跑(00000011)
如果值為4,那這個進程的所有線程能在2號CPU上跑(00000100)
如果值為5,那這個進程的所有線程能在0,2號CPU上跑(00000101)
4個字節共32位,所以最多32核

Windows64位就64核,
如果只有一個CPU把這個設置為4,那么這個進程就死了

+0x062 BasePriority:Char
基礎優先級或最低優先級,該進程中的所有線程最起始的優先級

EPROCESS其它成員介紹:

1.0x070 CreateTime: _LARGE_INTEGER
0x070 ExitTime: _LARGE_INTEGER

2.+0x084 UniqueProcessId:Ptr32 Void
進程的編號,即任務管理的PID

3.0x088 ActiveProcessLinks:_LIST_ENTRY(斷掉的話,可以達到進程隱藏的目的)
雙向鏈表,所有的活動進程都連接在一起,構成了一個鏈表
PsActiveProcessHead指向了全局鏈表頭
(注意:3環PEB里面有三個雙向鏈表,斷掉的話可以達到模塊隱藏的目的)

并未指向頭部,而是指向EPROCESS0x88的位置,所以一般都是(用所指向的地址-0x88)

4.+0x090 QuotaUsage:[3]Unit4B
+0x09c QuotaPeak:[3]Unit4B
物理頁相關的統計信息

5.+0x0a8 CommitCharge :Unit4B
+0x0ac PeakVirtualSize:Unit4B
+0x0b0 VirtualSize :Unit4B
虛擬內存相關的統計信息

6.+0x11c VadRoot : Ptr32 Void
標識0-2G哪些地址沒占用了
(指向了一棵平衡二叉樹,這棵二叉樹記錄了低2G的地址哪些是分配的,哪些是未分配的(當在低2G申請地址時,首先查詢這棵樹,如果這個地址未在這棵樹中,就說明未分配,那這個線性地址就分配給你。如果這個地址在這棵樹中,那么這個線性地址就不能分配給你)和模塊隱藏有關)

7.+0x0bc DebugPort : Ptr32 Void
(正常情況下,一個進程處于調試狀態,這里會存儲一個值,這個值也是一個結構體,這個結構體作為被調試進程和調試器之間的橋梁,有了這個值呢,被調試進程和調試器就可以進行通信(避免被調試的話,就可以DebugPort清零))
+0x0c0 ExceptionPort:Ptr32 Void
調試相關

8.+0x0c4 ObjectTable :Ptr32_HANDLE_TABLE
句柄表(每個進程都有個句柄表,在零環,這個句柄表中存儲了還用了哪些其它的內核對象(例如在一個進程里面CreateThread))
(反調試手段:查其它進程的句柄表,如果在其它進程的句柄表中發現了進程結構體的地址,也就是當前自身EPROCESS的值,說明其它進程打開了自身,為什么被打開呢?也就是被調試了。。。。。)

9.+0x174 ImageFileName :[16]Uchar
進程鏡像文件名 最多16個字節

10.+0x1a0 ActiveThreads:Unit4B
活動線程的數量

11.0x1b0 : Ptr32 _PEB(三環)
PEB(Process Environment Block 進程環境塊):進程在3環的一個結構體,里面包含了進程的模塊列表,是否處于調試狀態等信息(也就是三環PEB的地址)

EPROCESS補充:

進程結構體EPROCESS(0x50和0x190)是2個鏈表,里面圈著當前進程所有的線程

對于進程斷鏈,程序可以正常運行,原因是CPU執行與調度是基于線程的,進程斷鏈只是影響一些遍歷系統進程的API,并不會影響程序執行

對于線程斷鏈也是一樣的,斷鏈后在Windbg或者OD中無法看到被斷的掉的線程,但不影響其執行(仍然再跑)

ETHREAD簡介

線程結構體ETHREAD
每個Windows線程在0環都有一個對應的結構體:ETHREAD這個結構體包含了線程所有重要的信息

ETHREAD成員中_KTHREAD:

1.+0x000 Header :_DISPATCHER_HEADER
"可等待"對象,比如Mutex互斥體,Event事件等(WaitForSingleObject)

2.+0x018 InitialStack:Ptr32 Void
+0x01c StackLimit: Ptr32 Void
+0x028 KernelStack:Ptr32 Void
線程相關切換

3.0x020 Teb :Ptr32 Void
TEB,Thread Environment Block,線程環境塊
大小4KB,位于用戶地址空間
FS:[0]–>TEB(3環時,0環時FS執行KPCR)
(0環結構體給操作系統使用,3環結構體給應用程序使用)

4.+0x02c DebugActive :Uchar
如果值為-1不能使用調試寄存器:Dr0-Dr7

5.+0x034 ApcState :_KAPC_STATE
+0x0e8 ApcQueueLock :Uint4B
+0x138 ApcStatePointer :_KAPC_STATE
APC相關

6.+0x02d State :Uchar
線程狀態:就緒,等待還是運行

7.+0x06c BasePriority :Char
其初始值是所屬進程的BasePriority值(KPROCESS---->BasePriority),以后可以通過KeSetBasePriorityThread()函數重新設定

8.+0x070 WaitBlock :[4]_KWAIT_BLOCK
等待哪個對象(WaitForSingleObject)

9.+0x0e0 ServiceTable:Ptr32 Void
指向系統服務表基址

10 . +0x134 TrapFrame
進0環時保存環境(當程序從3環進入0環時,3環原來的寄存器的值所存儲的位置(TrapFrame結構體)一個線程中有一個結構體 )

11.+0x140 PreviousMode:Char
某些內核函數會判斷程序是在0環調用還是3環調用的

12.+0x1b0 ThreadListEntry :LIST_ENTRY
雙向鏈表 一個進程所有的線程,都掛在一個鏈表中,掛的就是這個位置,一共有兩個這樣的鏈表

ETHREAD其它成員:

1 . 0x1ec Cid:_CLIENT_ID
進程ID,線程ID

2 . +0x220 ThreadsProcess:Ptr32_EPROCESS
指向自己所屬進程

3.+0x22c ThreadListEntry:_LIST_ENTRY
雙向鏈表,一個進程所有的線程,都掛在一個鏈表中,掛的就是這個位置,一共有兩個這樣的鏈表

總結

以上是生活随笔為你收集整理的EPROCESS ETHREAD简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。