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 | význam | poznámky |
---|---|---|
Být laděn | Zda je proces laděn | Společnost Microsoft doporučuje nepoužívat toto pole, ale používat oficiální Win32 CheckRemoteDebuggerPresent() místo toho funkce knihovny.[2] |
Ldr | Ukazatel na a PEB_LDR_DATA struktura poskytující informace o načtených modulech | Obsahuje základní adresu kernel32 a ntdll. |
ProcessParameters | Ukazatel na a RTL_USER_PROCESS_PARAMETERS struktura poskytující informace o parametrech spuštění procesu | The 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] |
PostProcessInitRoutine | Ukazatel na funkci zpětného volání, která se volá po inicializaci DLL, ale před vyvoláním hlavního spustitelného kódu | Tato 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 relace | ID 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 | je inicializováno z | přepsatelné informacemi PE? |
---|---|---|
NumberOfProcessors | KeNumberOfProcessors | Ne |
NtGlobalFlag | NtGlobalFlag | Ne |
CriticalSectionTimeout | MmCriticalSectionTimeout | Ne |
HeapSegmentReserve | MmHeapSegmentReserve | Ne |
HeapSegmentCommit | MmHeapSegmentCommit | Ne |
HeapDeCommitTotalFreeThreshold | MmHeapDeCommitTotalFreeThreshold | Ne |
HeapDeCommitFreeBlockThreshold | MmHeapDeCommitFreeBlockThreshold | Ne |
MinimumStackCommit | MmMinimumStackCommitInBytes | Ne |
ImageProcessAffinityMask | KeActiveProcessors | ImageLoadConfigDirectory.ProcessAffinityMask |
OSMajorVersion | NtMajorVersion | Volitelná hlavička.Win32VersionValue & 0xFF |
OSMinorVersion | NtMinorVersion | (Volitelná hlavička.Win32VersionValue >> 8) & 0xFF |
OSBuildNumber | NtBuildNumber & 0x3FFF zkombinováno s CmNtCSDVersion | (Volitelná hlavička.Win32VersionValue >> 16) & 0x3FFF zkombinováno s ImageLoadConfigDirectory.CmNtCSDVersion |
OSPlatformId | VER_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
- ^ 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.
- ^ 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.
- ^ 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)
- ^ "Procesní a vláknové struktury: struktura RTL_USER_PROCESS_PARAMETERS". Knihovna MSDN. Microsoft. 2010-07-15. Citováno 2010-07-15.
- ^ "wine winternl.h: typedef struct _PEB". GitHub. zrcadlo na víno. 29. října 2019.
- ^ Chappel, Geoff. "PEB". Citováno 30. října 2019.