Process and Thread
On Job Training
Last updated
On Job Training
Last updated
Sơ đồ này hiển thị các thành phần chính của một đối tượng tiến trình (EPROCESS
) và các mối quan hệ giữa chúng.
Dưới đây là giải thích chi tiết về các thành phần và cấu trúc dữ liệu được hiển thị trong sơ đồ:
Process Control Block (PCB): Khối điều khiển tiến trình, chứa các thông tin quản lý cơ bản của tiến trình.
Protection Locks: Các khóa bảo vệ để đảm bảo an toàn khi truy cập các tài nguyên.
Process ID and Parent Process ID: ID của tiến trình và ID của tiến trình cha.
Active Process Link: Liên kết tới các tiến trình đang hoạt động.
Process Flags: Các cờ trạng thái của tiến trình.
Process Creation and Exit times: Thời gian tạo và kết thúc của tiến trình.
Quota Information: Thông tin về hạn mức tài nguyên mà tiến trình có thể sử dụng.
Session Process Link: Liên kết tới phiên làm việc của tiến trình.
Security / Exception / Debug Ports: Các cổng bảo mật, xử lý ngoại lệ và gỡ lỗi.
Primary Access Token: Token truy cập chính của tiến trình.
Job this Process Belongs to: Công việc mà tiến trình thuộc về.
Handle Table: Bảng quản lý các tay cầm (handle) của tiến trình.
Process Environment Block (PEB): Khối môi trường tiến trình, chứa các thông tin môi trường của tiến trình.
Image File Name: Tên tệp hình ảnh của tiến trình.
Image Base Address: Địa chỉ cơ sở của tệp hình ảnh.
Process Counters (Memory, I/O, ...): Các bộ đếm của tiến trình (bộ nhớ, I/O, ...).
Thread list head: Đầu danh sách các luồng của tiến trình.
Sequence Number: Số thứ tự của tiến trình.
Win32 Process Structure: Cấu trúc tiến trình Win32.
Wow64 Process Structure (64 bit only): Cấu trúc tiến trình Wow64 (chỉ dành cho hệ thống 64 bit).
Trustlet Identity (Win 10 x64): Danh tính tin cậy (trên Windows 10 x64).
Energy Consumption Values (Win 10): Giá trị tiêu thụ năng lượng (trên Windows 10).
Pico Context (Win 10): Ngữ cảnh Pico (trên Windows 10).
Protection Level and Signature: Mức độ bảo vệ và chữ ký.
DirectX Process: Thông tin về tiến trình DirectX.
Working Set: Bộ làm việc của tiến trình.
Section Object: Đối tượng vùng nhớ của tiến trình.
TOKEN: Chứa các thông tin về quyền truy cập của tiến trình.
EJOB: Đối tượng công việc chứa các tiến trình.
HANDLE_TABLE: Bảng quản lý tay cầm của tiến trình.
PEB: Khối môi trường tiến trình chứa các thông tin môi trường.
ETHREAD: Đối tượng luồng của tiến trình.
W32PROCESS: Cấu trúc tiến trình Win32.
EWOW64PROCESS: Cấu trúc tiến trình Wow64 (chỉ dành cho hệ thống 64 bit).
DXGPROCESS: Cấu trúc tiến trình DirectX.
MMSUPPORT_FULL: Hỗ trợ bộ nhớ đầy đủ.
SECTION: Đối tượng vùng nhớ.
PsActiveProcessHead là một danh sách liên kết chứa tất cả các tiến trình hiện đang hoạt động trong hệ thống. Mỗi đối tượng EPROCESS
có một liên kết tới danh sách này thông qua trường Active Process Link. Điều này cho phép hệ điều hành dễ dàng duyệt qua tất cả các tiến trình hiện tại.
Trong sơ đồ, mũi tên từ Active Process Link của một đối tượng EPROCESS
trỏ tới một đối tượng EPROCESS
khác cho thấy rằng các tiến trình được liên kết với nhau trong một danh sách liên kết đôi. Mỗi đối tượng EPROCESS
có một liên kết tới đối tượng EPROCESS
trước đó và tiếp theo trong danh sách.
Active Process Link là một trường trong cấu trúc EPROCESS
cho phép mỗi tiến trình được kết nối trong một danh sách liên kết đôi. Điều này có nghĩa là mỗi tiến trình biết tiến trình trước nó và tiến trình sau nó, giúp việc duyệt qua danh sách các tiến trình trở nên dễ dàng và hiệu quả hơn.
KPROCESS là cấu trúc dữ liệu được sử dụng bởi các phần của kernel (hạt nhân của hệ điều hành) như dispatcher (bộ phân phối), scheduler (bộ lập lịch), và interrupt/time accounting code (mã tính toán ngắt/thời gian). Kernel là phần chịu trách nhiệm quản lý các chức năng cấp thấp và tương tác trực tiếp với phần cứng.
Bằng cách sử dụng KPROCESS
cho các hoạt động liên quan đến kernel và EPROCESS
cho các hoạt động liên quan đến executive, hệ điều hành có thể thay đổi hoặc nâng cấp một phần mà không ảnh hưởng đến phần còn lại. Điều này làm cho hệ điều hành trở nên mô-đun và dễ dàng bảo trì hơn.
Sơ đồ này hiển thị các thành phần chính của một đối tượng KPROCESS
và các mối quan hệ giữa chúng. Đây là một phần quan trọng của hệ điều hành, giúp quản lý các tiến trình và luồng ở mức kernel.
Dispatcher Header:
Tiêu đề của bộ phân phối (dispatcher), chứa các thông tin cơ bản về tiến trình cần thiết cho việc lập lịch và chuyển ngữ cảnh.
Process Page Directory Base:
Cơ sở của thư mục trang của tiến trình, dùng để quản lý không gian địa chỉ ảo của tiến trình.
Kernel Time:
Thời gian CPU đã sử dụng trong chế độ kernel bởi tiến trình.
User Time:
Thời gian CPU đã sử dụng trong chế độ người dùng bởi tiến trình.
Cycle Time:
Tổng số chu kỳ CPU mà tiến trình đã sử dụng.
Context Switches:
Số lần chuyển ngữ cảnh mà tiến trình đã trải qua.
Thread List Head:
Đầu danh sách các luồng của tiến trình. Mũi tên từ đây trỏ tới cấu trúc KTHREAD
, thể hiện danh sách các luồng thuộc về tiến trình.
Process Lock:
Khóa bảo vệ của tiến trình, dùng để đảm bảo an toàn khi truy cập các tài nguyên liên quan đến tiến trình.
Process Affinity:
Thiết lập về CPU affinity của tiến trình, xác định tiến trình có thể chạy trên các CPU nào.
Process Flags:
Các cờ trạng thái của tiến trình.
Ideal Node:
Nút lý tưởng để tiến trình chạy trên trong hệ thống NUMA (Non-Uniform Memory Access).
Thread Seed:
Giá trị hạt giống dùng cho việc chọn luồng trong quá trình lập lịch.
Base Priority:
Mức độ ưu tiên cơ bản của tiến trình.
Process List Entry:
Mục trong danh sách tiến trình, liên kết các tiến trình với nhau.
Instrumentation Callback:
Các callback được dùng cho việc đo lường và giám sát tiến trình.
Secure Process ID:
ID bảo mật của tiến trình, dùng trong các ngữ cảnh bảo mật.
KPROCESS trỏ tới Page Directory
:
Thể hiện liên kết giữa cấu trúc KPROCESS
và cơ sở của thư mục trang của tiến trình.
KPROCESS trỏ tới KTHREAD
:
Thể hiện danh sách các luồng thuộc về tiến trình. Mỗi KTHREAD
đại diện cho một luồng cụ thể trong tiến trình.
PEB
là một cấu trúc dữ liệu trong bộ nhớ người dùng chứa thông tin về môi trường và trạng thái của một tiến trình. Đây là một phần quan trọng trong việc quản lý các tiến trình trong hệ điều hành.
Image Base Address:
Địa chỉ cơ sở của tệp hình ảnh của tiến trình (thường là tệp .exe).
Loader Database:
Cơ sở dữ liệu của bộ tải (loader), chứa thông tin về các module đã được tải bởi tiến trình.
Liên kết tới cấu trúc PEB_LDR_DATA
.
Thread Local Storage Data:
Dữ liệu lưu trữ cục bộ của luồng.
Process Flags:
Các cờ trạng thái của tiến trình.
Process Creation Parameters:
Thông số tạo tiến trình.
Liên kết tới cấu trúc RTL_USER_PROCESS_PARAMETERS
.
Process Heap (Pointer):
Con trỏ tới heap của tiến trình.
Liên kết tới Process heap
.
NT Global Flags:
Các cờ toàn cục của hệ điều hành.
GDI Shared Handle Table (Pointer):
Con trỏ tới bảng tay cầm dùng chung của GDI (Graphics Device Interface).
Liên kết tới GDI shared handle table
.
Number of Processors:
Số lượng bộ xử lý (processors) trong hệ thống.
Process Heaps Information:
Thông tin về các heap của tiến trình.
Loader Lock:
Khóa của bộ tải, dùng để đồng bộ hóa.
Liên kết tới RTL_CRITICAL_SECTION
.
OS Version Information:
Thông tin về phiên bản hệ điều hành.
AppCompat Data:
Dữ liệu tương thích ứng dụng.
Shim Data:
Dữ liệu về các lớp shim (tương thích ứng dụng).
Session ID:
ID của phiên làm việc mà tiến trình đang chạy.
Fiber Local Storage Data:
Dữ liệu lưu trữ cục bộ của fiber.
Assembly and Activation Context:
Ngữ cảnh của Assembly và Activation.
CSRSS Shared Memory (Pointer):
Con trỏ tới bộ nhớ chia sẻ của CSRSS (Client/Server Runtime Subsystem).
Thread Pool Information:
Thông tin về bộ luồng của tiến trình.
PEB_LDR_DATA: Cấu trúc dữ liệu chứa thông tin về các module được tải bởi tiến trình.
RTL_USER_PROCESS_PARAMETERS: Cấu trúc chứa các thông số tạo tiến trình, như các biến môi trường, đối số dòng lệnh, và thông tin cửa sổ.
Process heap: Con trỏ tới heap chính của tiến trình, được sử dụng để quản lý bộ nhớ động.
GDI shared handle table: Bảng chứa các handle GDI dùng chung giữa các tiến trình.
RTL_CRITICAL_SECTION: Cấu trúc dữ liệu được sử dụng để thực hiện khóa đồng bộ hóa giữa các luồng.
InheritedAddressSpace:
Giá trị: No
Mô tả: Cho biết liệu tiến trình có kế thừa không gian địa chỉ từ tiến trình cha hay không. Trong trường hợp này, tiến trình không kế thừa không gian địa chỉ.
ReadImageFileExecOptions:
Giá trị: No
Mô tả: Cho biết liệu các tùy chọn thực thi tệp hình ảnh đã được đọc hay chưa. Trong trường hợp này, chúng chưa được đọc.
BeingDebugged:
Giá trị: No
Mô tả: Cho biết liệu tiến trình có đang được gỡ lỗi hay không. Trong trường hợp này, tiến trình không bị gỡ lỗi.
ImageBaseAddress:
Giá trị: 00007ff6b7270000
Mô tả: Địa chỉ cơ sở của tệp hình ảnh của tiến trình (TrustedInstaller.exe
).
NtGlobalFlag:
Giá trị: 0
Mô tả: Các cờ toàn cục của hệ điều hành cho tiến trình. Ở đây không có cờ nào được thiết lập.
NtGlobalFlag2:
Giá trị: 0
Mô tả: Các cờ toàn cục bổ sung của hệ điều hành cho tiến trình. Ở đây không có cờ nào được thiết lập.
Ldr:
Giá trị: 00007ffc05c5c4c0
Mô tả: Con trỏ đến cấu trúc PEB_LDR_DATA
, chứa thông tin về các module đã được tải bởi tiến trình.
Ldr.Initialized:
Giá trị: Yes
Mô tả: Cho biết liệu bộ tải (loader) đã được khởi tạo hay chưa.
Ldr.InInitializationOrderModuleList:
Giá trị: 00000296314a24a0 . 00000296314bf420
Mô tả: Liên kết tới danh sách các module theo thứ tự khởi tạo.
Ldr.InLoadOrderModuleList:
Giá trị: 00000296314a2610 . 00000296314bf400
Mô tả: Liên kết tới danh sách các module theo thứ tự tải.
Ldr.InMemoryOrderModuleList:
Giá trị: 00000296314a2620 . 00000296314bf410
Mô tả: Liên kết tới danh sách các module theo thứ tự trong bộ nhớ.
Base TimeStamp và Module:
Danh sách các module đã được tải:
C:\Windows\servicing\TrustedInstaller.exe
C:\Windows\SYSTEM32\ntdll.dll
C:\Windows\System32\KERNEL32.DLL
C:\Windows\System32\KERNELBASE.dll
C:\Windows\System32\ucrtbase.dll
C:\Windows\System32\combase.dll
C:\Windows\System32\RPCRT4.dll
C:\Windows\System32\sechost.dll
C:\Windows\System32\bcrypt.dll
C:\Windows\System32\advapi32.dll
C:\Windows\System32\msvcrt.dll
C:\Windows\winsxs\amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.19041.4467_none_7e0f83e07c8c1985\wdscore.dll
C:\Windows\System32\OLEAUT32.dll
C:\Windows\System32\msvcp_win.dll
C:\Windows\system32\dbghelp.dll
C:\Windows\SYSTEM32\dbgcore.DLL
C:\Windows\SYSTEM32\kernel.appcore.dll
C:\Windows\System32\bcryptPrimitives.dll
C:\Windows\System32\user32.dll
C:\Windows\System32\win32u.dll
C:\Windows\System32\GDI32.dll
C:\Windows\System32\gdi32full.dll
C:\Windows\System32\clbcatq.dll
C:\Windows\servicing\CbsApi.dll
SubSystemData:
Giá trị: 0000000000000000
Mô tả: Thông tin về hệ thống con (subsystem). Ở đây không có dữ liệu hệ thống con.
ProcessHeap:
Giá trị: 00000296314a0000
Mô tả: Địa chỉ của heap chính của tiến trình.
ProcessParameters:
Giá trị: 00000296314a1c30
Mô tả: Địa chỉ của cấu trúc RTL_USER_PROCESS_PARAMETERS
, chứa các thông số của tiến trình như dòng lệnh, thư mục hiện tại, và biến môi trường.
CurrentDirectory:
Giá trị: 'C:\Windows\system32'
Mô tả: Thư mục hiện tại của tiến trình.
WindowTitle:
Giá trị: 'C:\Windows\servicing\TrustedInstaller.exe'
Mô tả: Tiêu đề của cửa sổ tiến trình.
ImageFile:
Giá trị: 'C:\Windows\servicing\TrustedInstaller.exe'
Mô tả: Đường dẫn đến tệp hình ảnh của tiến trình.
CommandLine:
Giá trị: 'C:\Windows\servicing\TrustedInstaller.exe'
Mô tả: Dòng lệnh được sử dụng để khởi chạy tiến trình.
DllPath:
Giá trị: '< Name not readable >'
Mô tả: Đường dẫn tới thư mục chứa các tệp DLL. Ở đây không thể đọc được tên.
Environment:
Giá trị: 00000296314a0fe0
Mô tả: Địa chỉ của khối môi trường chứa các biến môi trường của tiến trình.
Danh sách các biến môi trường:
ALLUSERSPROFILE: C:\ProgramData
APPDATA: C:\Windows\system32\config\systemprofile\AppData\Roaming
CommonProgramFiles: C:\Program Files\Common Files
CommonProgramFiles(x86): C:\Program Files (x86)\Common Files
CommonProgramW6432: C:\Program Files\Common Files
COMPUTERNAME: ANM-TRUNGPQ6
ComSpec: C:\Windows\system32\cmd.exe
DriverData: C:\Windows\System32\Drivers\DriverData
LOCALAPPDATA: C:\Windows\system32\config\systemprofile\AppData\Local
NUMBER_OF_PROCESSORS: 6
OS: Windows_NT
Path: C:\Program Files (x86)\VMware\VMware Workstation\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files (x86)\NetSarang\Xshell 7;C:\Program Files (x86)\NetSarang\Xftp 7;C:\Program Files\dotnet;D:\Windows Kits\10\Windows Performance Toolkit;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps
PATHEXT: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE: AMD64
PROCESSOR_IDENTIFIER: Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
PROCESSOR_LEVEL: 6
PROCESSOR_REVISION: 9e0a
ProgramData: C:\ProgramData
ProgramFiles: C:\Program Files
ProgramFiles(x86): C:\Program Files (x86)
ProgramW6432: C:\Program Files
PSModulePath: %ProgramFiles%\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC: C:\Users\Public
SystemDrive: C:
SystemRoot: C:\Windows
TEMP: C:\Windows\TEMP
TMP: C:\Windows\TEMP
USERDOMAIN: WORKGROUP
USERNAME: ANM-TRUNGPQ6$
USERPROFILE: C:\Windows\system32\config\systemprofile
windir: C:\Windows
ZES_ENABLE_SYSMAN: 1
Client ID:
ID của tiến trình khách hàng (Client ID).
Process Link:
Liên kết tới các cấu trúc CSR_PROCESS
khác, có thể được sử dụng để tạo danh sách liên kết của các tiến trình.
Thread List Head:
Đầu danh sách các luồng (threads) của tiến trình. Liên kết tới cấu trúc CSR_THREAD
.
Client Port Handle:
Tay cầm của cổng khách hàng (Client Port Handle).
Process Handle:
Tay cầm của tiến trình (Process Handle).
Client View Data:
Dữ liệu về góc nhìn của khách hàng (Client View Data).
Session Data:
Dữ liệu về phiên làm việc (Session Data). Liên kết tới cấu trúc CSR_NT_SESSION
.
Process Flags:
Các cờ trạng thái của tiến trình (Process Flags).
Reference Count:
Bộ đếm tham chiếu (Reference Count).
Messages Data:
Dữ liệu về các thông điệp (Messages Data).
Shutdown Level:
Mức độ tắt (Shutdown Level).
Flags:
Các cờ bổ sung (Flags).
Process Group Data:
Dữ liệu về nhóm tiến trình (Process Group Data).
Server Data:
Dữ liệu của máy chủ (Server Data). Mỗi cái tương ứng với một CSR_SERVER_DLL
.
CSR_PROCESS:
Liên kết tới các cấu trúc CSR_PROCESS
khác để tạo danh sách liên kết của các tiến trình.
CSR_THREAD:
Liên kết tới danh sách các luồng của tiến trình thông qua Thread List Head
.
CSR_NT_SESSION:
Liên kết tới dữ liệu phiên làm việc của hệ thống NT, cung cấp thông tin về phiên làm việc mà tiến trình thuộc về.
One per CSR_SERVER_DLL:
Liên kết tới các dữ liệu máy chủ, mỗi cái tương ứng với một CSR_SERVER_DLL
. Điều này cho thấy rằng mỗi DLL máy chủ có dữ liệu riêng trong cấu trúc này.
Lệnh dt:
Lệnh dt
(Display Type) trong WinDbg được sử dụng để hiển thị thông tin chi tiết về một cấu trúc dữ liệu (data type).
Cú pháp cơ bản: dt [ModuleName!]TypeName [Address]
.
nt
là module kernel.
Xem cấu trúc EPROCESS: dt nt!_eprocess
.
Xem cấu trúc KPROCESS: dt nt!_kprocess
.
Xem từng thành phần của EPROCESS: dt nt!_eprocess Pcb
.
Xem đệ quy: thêm -r
. Điều chỉnh độ sâu của đệ quy: -r <number>
.
Lấy địa chỉ của tất cả cấu trúc EPROCESS trong hệ thống: !process 0 0
.
Chỉ định program: !process 0 0 [xxx.exe]
.
Xem giá trị cụ thể của từng thành phần EPROCESS của một tiến trình: dt nt!_eprocess <address>
.
Do KPROCESS là phần đầu của EPROCESS nên address trên cũng có thể dùng để xem KPROCESS. Hay dt nt!_kprocess <address>
.
Hiển thị thông tin chi tiết về 1 tiến trình: !process [Address/PID]
. (PID bằng hex)
Nếu không ghi gì, nó sẽ hiển thị thông tin về tiến trình sở hữu luồng hiện đang chạy trên CPU 0
Ví dụ:
PROCESS ffff9b800ab8c080:
Đây là địa chỉ của cấu trúc EPROCESS
đại diện cho tiến trình EngHost.exe
.
SessionId: 2:
ID của phiên làm việc (session) mà tiến trình này đang chạy.
Cid: 380c:
Client ID (CID), hay Process ID (PID) của tiến trình, ở dạng thập lục phân (hexadecimal).
Peb: ac54fc4000:
Địa chỉ của Process Environment Block
(PEB), một cấu trúc dữ liệu chứa thông tin về môi trường của tiến trình.
ParentCid: 2144:
Client ID của tiến trình cha (parent process).
DirBase: 92465002:
Địa chỉ cơ sở của thư mục trang, sử dụng để quản lý không gian địa chỉ ảo của tiến trình.
ObjectTable: ffffbd0cf3391b40:
Địa chỉ của bảng đối tượng, quản lý các tay cầm (handles) của tiến trình.
HandleCount: 169:
Số lượng tay cầm (handles) mà tiến trình đang sử dụng.
Image: EngHost.exe:
Tên của tệp hình ảnh tiến trình.
VadRoot ffff9b8009c05960 Vads 93 Clone 0 Private 5786. Modified 1875. Locked 1:
VadRoot
: Địa chỉ của Virtual Address Descriptor
(VAD) root.
Vads
: Số lượng VAD.
Clone
: Số lượng không gian địa chỉ được sao chép.
Private
: Số lượng trang bộ nhớ riêng tư.
Modified
: Số lượng trang bộ nhớ đã bị chỉnh sửa.
Locked
: Số lượng trang bộ nhớ bị khóa.
DeviceMap ffffbd0cfe1a8800:
Địa chỉ của Device Map
, sử dụng để ánh xạ thiết bị.
Token ffffbd0cf3cc05f0:
Địa chỉ của Access Token
đại diện cho quyền truy cập của tiến trình.
ElapsedTime 00:44:32.749:
Thời gian tiến trình đã chạy.
UserTime 00:00:00.015:
Thời gian CPU sử dụng ở chế độ người dùng.
KernelTime 00:00:00.015:
Thời gian CPU sử dụng ở chế độ kernel.
QuotaPoolUsage[PagedPool] 173312:
Số lượng bộ nhớ từ paged pool mà tiến trình sử dụng.
QuotaPoolUsage[NonPagedPool] 13424:
Số lượng bộ nhớ từ nonpaged pool mà tiến trình sử dụng.
Working Set Sizes (now,min,max) (9675, 50, 345) (38700KB, 200KB, 1380KB):
Kích thước bộ nhớ làm việc hiện tại, tối thiểu và tối đa.
PeakWorkingSetSize 11440:
Kích thước bộ nhớ làm việc lớn nhất đã đạt.
VirtualSize 2101410 Mb:
Kích thước bộ nhớ ảo của tiến trình.
PeakVirtualSize 2101410 Mb:
Kích thước bộ nhớ ảo lớn nhất đã đạt.
PageFaultCount 19976:
Số lần page fault (khi tiến trình cần truy cập vào bộ nhớ không có trong RAM và phải lấy từ đĩa cứng).
MemoryPriority BACKGROUND:
Ưu tiên bộ nhớ của tiến trình là nền (background).
BasePriority 8:
Mức độ ưu tiên cơ bản của tiến trình.
CommitCharge 8407:
Lượng bộ nhớ mà tiến trình cam kết sử dụng.
Job ffff9b800386b060:
Địa chỉ của đối tượng công việc (job object) nếu tiến trình là một phần của một job.
Trong kết quả của lệnh
!process
, bạn thấy thông tin sau:Điều này có nghĩa là tiến trình
EngHost.exe
đã tồn tại trong khoảng thời gian 44 phút 32 giây, nhưng chỉ sử dụng 15 mili giây ở chế độ người dùng và 15 mili giây ở chế độ kernel. Điều này có thể xảy ra vì:
Tiến trình có thể chủ yếu ở trạng thái chờ hoặc ngủ.
Tiến trình có thể thực hiện các tác vụ rất nhẹ nhàng không đòi hỏi nhiều thời gian CPU.
Tiến trình có thể bị gián đoạn nhiều lần và chỉ hoạt động trong các khoảng thời gian ngắn.
Dump process handle table: !handle [Address/PID]
.
Pause command: Ctrl + Break
hoặc Ctrl + Fn + Break
.
Do PEB
nằm trong không gian địa chỉ người dùng (user-mode address space), nó chỉ hợp lệ trong ngữ cảnh của tiến trình sở hữu nó. Để xem PEB
của một tiến trình khác, bạn cần chuyển đổi ngữ cảnh WinDbg sang tiến trình đó. Lệnh: .process /p [Address]; !peb [PebAddress]
.
Nếu không xem được structure nào thì gọi lệnh đó nhưng thêm address của process sử dụng cấu trúc đó, nó sẽ tự down symbol về cho mình. Ví dụ: dt win32k!_W32PROCESS ffff9b80018f1340
or dt csrss!_csr_process ffff9b8012e98080
.
Stack canary là một biện pháp bảo vệ được sử dụng để phát hiện và ngăn chặn các cuộc tấn công buffer overflow. Nó hoạt động bằng cách đặt một giá trị ngẫu nhiên (gọi là canary) giữa các biến cục bộ của hàm và địa chỉ trả về của hàm. Khi hàm kết thúc, giá trị canary này sẽ được kiểm tra lại. Nếu giá trị canary đã bị thay đổi, điều này có nghĩa là có một cuộc tấn công buffer overflow đã xảy ra và chương trình sẽ kết thúc để ngăn chặn khai thác tiếp.
Position Independent Executable (PIE) và Address Space Layout Randomization (ASLR) đều là kỹ thuật bảo mật được sử dụng để làm khó khăn hơn cho các cuộc tấn công khai thác bộ nhớ, nhưng chúng hoạt động ở các cấp độ khác nhau và có các mục tiêu khác nhau. Dưới đây là sự khác biệt chính giữa PIE và ASLR:
Mục tiêu:
ASLR được thiết kế để ngẫu nhiên hóa vị trí của các vùng bộ nhớ chính trong không gian địa chỉ của một quá trình, bao gồm stack, heap, các thư viện chia sẻ (shared libraries), và các phân đoạn của chương trình (như text segment, data segment).
Cách thức hoạt động:
Mỗi lần một chương trình được chạy, vị trí của các thành phần này sẽ thay đổi ngẫu nhiên trong không gian địa chỉ.
Ví dụ, địa chỉ base của các thư viện chia sẻ (như libc) sẽ thay đổi mỗi lần chương trình khởi động lại.
Lợi ích bảo mật:
Làm khó khăn hơn cho kẻ tấn công dự đoán các địa chỉ cụ thể trong bộ nhớ, từ đó làm cho việc thực hiện các cuộc tấn công như buffer overflow hoặc return-oriented programming (ROP) trở nên khó khăn hơn.
Mục tiêu:
PIE cho phép chính bản thân mã thực thi của chương trình (executable code) có thể được tải vào bất kỳ vị trí nào trong không gian địa chỉ bộ nhớ.
Cách thức hoạt động:
Chương trình được biên dịch với các tùy chọn để trở thành một "position-independent executable". Điều này có nghĩa là mọi địa chỉ bên trong chương trình đều được tính toán tương đối thay vì tuyệt đối.
Kết quả là chương trình có thể chạy tại bất kỳ vị trí nào trong bộ nhớ mà không cần phải sửa đổi mã nguồn của nó.
Lợi ích bảo mật:
Kết hợp với ASLR, PIE làm cho địa chỉ base của chính bản thân mã thực thi chương trình thay đổi mỗi lần chương trình chạy.
Điều này có nghĩa là không chỉ các thư viện chia sẻ, mà còn cả chính mã thực thi của chương trình cũng thay đổi vị trí trong không gian địa chỉ, làm tăng tính ngẫu nhiên và độ khó cho các cuộc tấn công khai thác bộ nhớ.
ASLR: Áp dụng cho toàn bộ không gian địa chỉ của quá trình, bao gồm cả stack, heap, và các thư viện chia sẻ. Mục tiêu là ngẫu nhiên hóa vị trí của các thành phần trong bộ nhớ để làm khó khăn cho việc dự đoán địa chỉ cụ thể.
PIE: Áp dụng cho chính mã thực thi của chương trình. Mục tiêu là làm cho chính mã chương trình có thể chạy tại bất kỳ vị trí nào trong không gian địa chỉ, thường kết hợp với ASLR để ngẫu nhiên hóa vị trí base của chương trình.