正在記憶體裡執行的才叫 Process
程式幫你執行的才是 Process
死掉了就不是 Process

Components

Process Threads

一個 process 可以有多個 threads
執行的最小單位是 threads
threads 之間互不干涉
threads 之間可以交換資訊

Process Memory

Virtual Memory

可以超出 RAM 大小 用 page 管理

Physical Memory

實際上要被使用的記憶體

Memory Type

Private Memory

只有自身 Process 可以存取

Mapped

可以跟別的 processes 共用 Memory 空間

Image Memory

一個 Program 的 Code / Data 映射到 Memory 上

Process Enviroment Block

PEB
很多沒寫清楚用途的欄位

常用欄位

BeingDebugged

當前 Process 被 debug 時會 = 1

Ldr

指向 PEB_LDR_DATA
結構內記錄了當前載入的 DLL

ProcessParameters

當前 Process 執行時的參數
可以拿來 Spoofing
可以透過改掉來偽裝

AtlThunkSListPtr / AtlThunkSListPtr32

用來存 Function Thunk 的 Linked-List
類似 Linux 的 GOT

Thread Enviroment Block

TEB

TEB可以從 FS,GS Register 取得
TEB可以取得PEB

TlsSlots

Thread Local Storage
threads 可以用 TLS 存 Per Thread 的資料

Process And Thread Handles

每個 Process 跟 Thread 都有自己的 Unique ID
可以用 OpenProcess / OpenThread 來做進一步操作

Windbg

可以用 !peb 叫出 PEB 的欄位