Khi xem tài liệu của Microsoft, ta thường bắt gặp các thành phần trong cấu trúc được định nghĩa với kiểu Reserved
. Những thành phần này thường là các mảng BYTE
hoặc PVOID
. Microsoft sử dụng kiểu Reserved
để giữ bí mật và hạn chế người dùng hiểu rõ các cấu trúc, nhằm ngăn chặn việc chỉnh sửa không mong muốn lên các thành phần này.
Như đã biết, cấu trúc PEB có một vài thành phần được định nghĩa với kiểu Reserved
:
typedef struct _PEB {
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE Reserved2[1];
PVOID Reserved3[2];
PPEB_LDR_DATA Ldr;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID Reserved4[3];
PVOID AtlThunkSListPtr;
PVOID Reserved5;
ULONG Reserved6;
PVOID Reserved7;
ULONG Reserved8;
ULONG AtlThunkSListPtr32;
PVOID Reserved9[45];
BYTE Reserved10[96];
PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
BYTE Reserved11[128];
PVOID Reserved12[1];
ULONG SessionId;
} PEB, *PPEB;
Finding Reserved Members
Có một cách để xác định các thành phần Reserved
là sử dụng lệnh !peb
ở trong WinDbg:
Seealso
Có thể xem cấu trúc đầy đủ của PEB ở mã nguồn của Process Hacker (nay là SystemInformer).
Alternative Documentation
Ngoài cách trên, ta cũng có thể tham khảo các tài liệu sau:
- Process Hacker’s Header Files
- undocumented.ntinternals.net - một vài cấu trúc có thể bị lỗi thời.
- ReactOS’s Documentation
- Vergilius Project - mặc dù chủ yếu là các cấu trúc trong kernel của Windows, nó vẫn là một tài liệu đáng giá.
Considerations
Khi chọn định nghĩa structure, cần lưu ý:
- Một số định nghĩa chỉ phù hợp với kiến trúc cụ thể, như
x86
hoặcx64
. - Với các cấu trúc lồng nhau, cần bao gồm tất cả các cấu trúc con trong định nghĩa.
- Nếu sử dụng custom definition, không thể đồng thời include original definition từ Microsoft, vì vậy chỉ nên chọn một trong hai.
Related
list
from outgoing([[MalDev - Undocumented Structures]])
sort file.ctime asc