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:

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ặc x64.
  • 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.
list
from outgoing([[MalDev - Undocumented Structures]])
sort file.ctime asc

Resources