Processmiljöblock
Vid beräkning är Process Environment Block (förkortat PEB ) en datastruktur i Windows NT- operativsystemfamiljen. Det är en ogenomskinlig datastruktur som används av operativsystemet internt, vars de flesta fält inte är avsedda att användas av något annat än operativsystemet. Microsoft noterar i sin MSDN Library- dokumentation - som bara dokumenterar ett fåtal av fälten - att strukturen "kan komma att ändras i framtida versioner av Windows". PEB innehåller datastrukturer som gäller över en hel process , inklusive global kontext, startparametrar, datastrukturer för programbildladdaren, programmets bildbasadress och synkroniseringsobjekt som används för att tillhandahålla ömsesidig uteslutning för processomfattande datastrukturer.
PEB är nära associerad med kärnläget EPROCESS datastruktur
, såväl som med per-process datastrukturer som hanteras inom adressutrymmet för Client-Server Runtime Sub-System processen. Men (liksom CSRSS-datastrukturerna) är PEB inte en datastruktur i kärnläge i sig. Den finns i applikationslägets adressutrymme för processen som den relaterar till. Detta beror på att den är designad för att användas av applikationslägeskoden i operativsystemets bibliotek, såsom NTDLL , som körs utanför kärnläget, såsom koden för programbildsläsaren och heaphanteraren.
I WinDbg är kommandot som dumpar innehållet i en PEB kommandot !peb
, som skickas till adressen till PEB inom en process applikationsadressutrymme. Den informationen erhålls i sin tur av !process
, som visar informationen från EPROCESS
-datastrukturen, vars ett fält är adressen till PEB.
Fält | menande | anteckningar |
---|---|---|
BeingDebugged |
Huruvida processen felsöks | Microsoft rekommenderar att du inte använder det här fältet utan använder den officiella Win32 CheckRemoteDebuggerPresent () biblioteksfunktionen istället. |
Ldr | En pekare till en PEB_LDR_DATA -struktur som ger information om laddade moduler |
Innehåller basadressen för kernel32 och ntdll . |
Processparametrar | En pekare till en RTL_USER_PROCESS_PARAMETERS -struktur som ger information om processstartparametrar |
RTL_USER_PROCESS_PARAMETERS - strukturen är också mestadels ogenomskinlig och kan inte garanteras vara konsekvent över flera versioner av Windows. |
PostProcessInitRoutine | En pekare till en återuppringningsfunktion som anropas efter DLL-initiering men innan den körbara huvudkoden anropas | Denna återuppringningsfunktion används på Windows 2000 , men det är inte garanterat att den kommer att användas på senare versioner av Windows NT. |
SessionId | Sessions-ID för Terminal Services-sessionen som processen är en del av | Systemanropet NtCreateUserProcess () initierar detta genom att anropa kärnans interna MmGetSessionId () funktion. |
Innehållet i PEB initieras av NtCreateUserProcess ()
systemanropet, Native API -funktionen som implementerar en del av, och understödjer, Win32 CreateProcess ()
, CreateProcessAsUser ()
, CreateProcessWithTokenW ()
och CreateProcessWithLogonW ()
biblioteksfunktioner som finns i biblioteken kernel32.dll och advapi32.dll samt underbygga funktionen fork()
i Windows NT POSIX- biblioteket, posix.dll.
För Windows NT POSIX-processer initieras innehållet i den nya processens PEB av NtCreateUserProcess ()
som helt enkelt en direkt kopia av den överordnade processens PEB, i linje med hur gaffelfunktionen ()
fungerar. För Win32-processer är det initiala innehållet i en ny process PEB huvudsakligen hämtat från globala variabler som underhålls i kärnan. Emellertid kan flera fält istället hämtas från information som tillhandahålls i processens bildfil, i synnerhet information som tillhandahålls i IMAGE_OPTIONAL_HEADER32
-datastrukturen inom PE -filformatet (PE+ eller PE32+ i 64-bitars exekverbara bilder).
Fält | initieras från | åsidosätts av PE-information? |
---|---|---|
Antal processorer |
KeNumberOfProcessors |
Nej |
NtGlobalFlagga |
NtGlobalFlagga |
Nej |
CriticalSectionTimeout |
MmCriticalSectionTimeout |
Nej |
HeapSegmentReserv |
MmHeapSegmentReserve |
Nej |
HeapSegmentCommit |
MmHeapSegmentCommit |
Nej |
HeapDeCommitTotalFreeThreshold |
MmHeapDeCommitTotalFreeThreshold |
Nej |
HeapDeCommitFreeBlockThreshold |
MmHeapDeCommitFreeBlockThreshold |
Nej |
MinimumStackCommit |
MmMinimumStackCommitInBytes |
Nej |
ImageProcessAffinityMask |
KeActiveProcessors |
ImageLoadConfigDirectory . ProcessAffinityMask
|
OSMajorVersion |
NtMajorVersion |
Valfri Header . Win32VersionValue & 0xFF
|
OSMinorVersion |
NtMinorVersion |
( OptionalHeader . Win32VersionValue >> 8 ) & 0xFF
|
OSBuildNumber |
NtBuildNumber & 0x3FFF kombinerat med CmNtCSDVersion
|
( OptionalHeader . Win32VersionValue >> 16 ) & 0x3FFF kombinerat med ImageLoadConfigDirectory . CmNtCSDVersion
|
OSPlatformId |
VER_PLATFORM_WIN32_NT |
( OptionalHeader . Win32VersionValue >> 30 ) ^ 0x2
|
WineHQ - projektet ger en fullständigare PEB-definition i sin version av winternl.h. Senare versioner av Windows har justerat antalet och syftet med vissa fält.
- ^ a b Rajeev Nagar (1997). Windows NT-filsystemets interna delar: en utvecklarguide . O'Reilly-serien. O'Reilly. s. 129 . ISBN 9781565922495 .
- ^ a b c d "Bearbeta och trådstrukturer: PEB-struktur" . MSDN bibliotek . Microsoft . 2010-07-15. Arkiverad från originalet 2012-10-22 . Hämtad 2010-07-15 .
-
^ a b c d e f
Mark E. Russinovich , David A. Solomon och Alex Ionescu (2009). Windows inre delar . Microsoft Press Series (5:e upplagan). Microsoft Press. s. 335–336, 341–342, 348, 357–358. ISBN 9780735625303 .
{{ citera bok }}
: CS1 underhåll: flera namn: lista över författare ( länk ) - ^ "Process- och trådstrukturer: RTL_USER_PROCESS_PARAMETERS-struktur" . MSDN bibliotek . Microsoft . 2010-07-15 . Hämtad 2010-07-15 .
- ^ "vin vinternl.h: typedef struct _PEB" . GitHub . vin-spegel. 29 oktober 2019.
- ^ Chappel, Geoff. "PEB" . Hämtad 30 oktober 2019 .