Blokovat procesní prostředí - Process Environment Block

v výpočetní the Blokovat procesní prostředí (zkráceně PEB) je datová struktura v Windows NT rodina operačních systémů. Je to neprůhledná datová struktura který je používán operačním systémem interně, jehož většina polí není určena pro použití jiným než operačním systémem.[1] Microsoft uvádí ve svém Knihovna MSDN dokumentace - která dokumentuje pouze několik polí - že struktura „může být v budoucích verzích systému Windows změněna“.[2] PEB obsahuje datové struktury, které platí napříč celkem proces, včetně globálního kontextu, spouštěcích parametrů, datových struktur pro zavaděč obrazu programu, základní adresy obrazu programu a synchronizačních objektů používaných k poskytování vzájemné vyloučení pro datové struktury celého procesu.[1]

PEB je úzce spojena s režim jádra EPROCESS datovou strukturu, stejně jako s datovými strukturami zpracovanými v rámci procesu v adresním prostoru Podsystém runtime klient-server proces. Avšak (podobně jako datové struktury CSRSS) PEB není samotná datová struktura v režimu jádra. Je umístěn v adresním prostoru aplikačního režimu procesu, ke kterému se vztahuje. Důvodem je, že je navržen pro použití kódem režimu aplikace v knihovnách operačního systému, například NTDLL, který se spouští mimo režim jádra, například kód pro zavaděč obrazu programu a správce haldy.[3]

v WinDbg, příkaz, který vypíše obsah PEB, je ! peb příkaz, kterému je předána adresa PEB v rámci adresního prostoru aplikace procesu. Tyto informace zase získává !proces příkaz, který zobrazuje informace z EPROCESS datová struktura, jedním z jejích polí je adresa PEB.[3]

Pole PEB, která jsou dokumentována společností Microsoft[2]
Polevýznampoznámky
Být laděnZda je proces laděnSpolečnost Microsoft doporučuje nepoužívat toto pole, ale používat oficiální Win32 CheckRemoteDebuggerPresent() místo toho funkce knihovny.[2]
LdrUkazatel na a PEB_LDR_DATA struktura poskytující informace o načtených modulechObsahuje základní adresu kernel32 a ntdll.
ProcessParametersUkazatel na a RTL_USER_PROCESS_PARAMETERS struktura poskytující informace o parametrech spuštění procesuThe RTL_USER_PROCESS_PARAMETERS struktura je také většinou neprůhledná a není zaručeno, že bude konzistentní ve více verzích systému Windows.[4]
PostProcessInitRoutineUkazatel na funkci zpětného volání, která se volá po inicializaci DLL, ale před vyvoláním hlavního spustitelného kóduTato funkce zpětného volání se používá na Windows 2000, ale není zaručeno jeho použití v novějších verzích systému Windows NT.[2]
ID relaceID relace relace Terminálové služby, jehož je proces součástíThe NtCreateUserProcess() systémové volání to inicializuje voláním interního jádra MmGetSessionId() funkce.[3]

Obsah PEB inicializuje NtCreateUserProcess() systémové volání, Nativní API funkce, která implementuje část Win32 CreateProcess(), CreateProcessAsUser(), CreateProcessWithTokenW(), a CreateProcessWithLogonW() funkce knihovny, které jsou v knihovny kernel32.dll a advapi32.dll stejně jako podpora Vidlička() funkce v Windows NT POSIX knihovna, posix.dll.[3]

U procesů Windows NT POSIX se inicializuje obsah nového procesu 'PEB NtCreateUserProcess() jako jednoduše přímá kopie nadřazeného procesu 'PEB, v souladu s tím, jak Vidlička() funkce funguje. U procesů Win32 je počáteční obsah nového procesu PEB převzat hlavně z globálních proměnných udržovaných v jádře. Některá pole však mohou být místo toho převzata z informací poskytnutých v obrazovém souboru procesu, zejména z informací poskytnutých v IMAGE_OPTIONAL_HEADER32 datová struktura v rámci PE formát souboru (PE + nebo PE32 + v 64bitových spustitelných obrázcích).[3]

Pole z PEB, která jsou inicializována z globálních proměnných jádra[3]
Poleje inicializováno zpřepsatelné informacemi PE?
NumberOfProcessorsKeNumberOfProcessorsNe
NtGlobalFlagNtGlobalFlagNe
CriticalSectionTimeoutMmCriticalSectionTimeoutNe
HeapSegmentReserveMmHeapSegmentReserveNe
HeapSegmentCommitMmHeapSegmentCommitNe
HeapDeCommitTotalFreeThresholdMmHeapDeCommitTotalFreeThresholdNe
HeapDeCommitFreeBlockThresholdMmHeapDeCommitFreeBlockThresholdNe
MinimumStackCommitMmMinimumStackCommitInBytesNe
ImageProcessAffinityMaskKeActiveProcessorsImageLoadConfigDirectory.ProcessAffinityMask
OSMajorVersionNtMajorVersionVolitelná hlavička.Win32VersionValue & 0xFF
OSMinorVersionNtMinorVersion(Volitelná hlavička.Win32VersionValue >> 8) & 0xFF
OSBuildNumberNtBuildNumber & 0x3FFF zkombinováno s CmNtCSDVersion(Volitelná hlavička.Win32VersionValue >> 16) & 0x3FFF zkombinováno s ImageLoadConfigDirectory.CmNtCSDVersion
OSPlatformIdVER_PLATFORM_WIN32_NT(Volitelná hlavička.Win32VersionValue >> 30) ^ 0x2

The VínoHQ projekt poskytuje úplnější definici PEB ve své verzi winternl.h.[5] Novější verze systému Windows upravily počet a účel některých polí.[6]

Reference

  1. ^ A b Rajeev Nagar (1997). Interní systémy systému Windows NT: příručka pro vývojáře. O'Reilly Series. O'Reilly. str.129. ISBN  9781565922495.
  2. ^ A b C d "Procesní a vláknové struktury: PEB struktura". Knihovna MSDN. Microsoft. 2010-07-15. Archivovány od originál dne 22.10.2012. Citováno 2010-07-15.
  3. ^ A b C d E F Mark E. Russinovich, David A. Solomon a Alex Ionescu (2009). Interní prvky systému Windows. Microsoft Press Series (5. vydání). Microsoft Press. str. 335–336, 341–342, 348, 357–358. ISBN  9780735625303.CS1 maint: více jmen: seznam autorů (odkaz)
  4. ^ "Procesní a vláknové struktury: struktura RTL_USER_PROCESS_PARAMETERS". Knihovna MSDN. Microsoft. 2010-07-15. Citováno 2010-07-15.
  5. ^ "wine winternl.h: typedef struct _PEB". GitHub. zrcadlo na víno. 29. října 2019.
  6. ^ Chappel, Geoff. "PEB". Citováno 30. října 2019.

externí odkazy