Bloco de ambiente de processo - Process Environment Block
Na computação, o Process Environment Block (abreviado PEB ) é uma estrutura de dados da família do sistema operacional Windows NT . É uma estrutura de dados opaca usada pelo sistema operacional internamente, a maioria de cujos campos não se destinam ao uso por nada além do sistema operacional. A Microsoft observa, em sua documentação da Biblioteca MSDN - que documenta apenas alguns dos campos - que a estrutura "pode ser alterada em versões futuras do Windows". O PEB contém estruturas de dados que se aplicam a todo um processo , incluindo contexto global, parâmetros de inicialização, estruturas de dados para o carregador de imagem do programa, o endereço da base da imagem do programa e objetos de sincronização usados para fornecer exclusão mútua para estruturas de dados de todo o processo.
O PEB está intimamente associado à estrutura de dados do modo kernel EPROCESS , bem como às estruturas de dados por processo gerenciadas no espaço de endereço do processo do subsistema de tempo de execução do cliente-servidor . No entanto, (como as estruturas de dados CSRSS), o PEB não é uma estrutura de dados do modo kernel em si. Ele reside no espaço de endereço do modo de aplicativo do processo ao qual está relacionado. Isso ocorre porque ele foi projetado para ser usado pelo código do modo de aplicativo nas bibliotecas do sistema operacional, como NTDLL , que é executado fora do modo kernel, como o código para o carregador de imagem do programa e o gerenciador de heap.
No WinDbg , o comando que despeja o conteúdo de um PEB é o !pebcomando, ao qual é passado o endereço do PEB dentro do espaço de endereço do aplicativo de um processo. Essas informações, por sua vez, são obtidas pelo !processcomando, que exibe as informações da EPROCESSestrutura de dados, um dos campos é o endereço do PEB.
| Campo | significado | notas |
|---|---|---|
BeingDebugged |
Se o processo está sendo depurado | A Microsoft recomenda não usar esse campo, mas usar a função de biblioteca oficial do Win32 .
CheckRemoteDebuggerPresent() |
| Ldr | Um ponteiro para uma PEB_LDR_DATAestrutura que fornece informações sobre os módulos carregados |
Contém o endereço básico de kernel32 e ntdll . |
| Parâmetros do processo | Um ponteiro para uma RTL_USER_PROCESS_PARAMETERSestrutura que fornece informações sobre os parâmetros de inicialização do processo |
A RTL_USER_PROCESS_PARAMETERSestrutura também é basicamente opaca e não há garantia de consistência em várias versões do Windows.
|
| PostProcessInitRoutine | Um ponteiro para uma função de retorno de chamada chamada após a inicialização da DLL, mas antes que o código executável principal seja invocado | Esta função de retorno de chamada é usada no Windows 2000 , mas não tem garantia de uso em versões posteriores do Windows NT. |
| Identificação de sessão | O ID da sessão dos Serviços de Terminal da qual o processo faz parte | A chamada do sistema inicializa isso chamando a função interna do kernel .
NtCreateUserProcess()MmGetSessionId() |
O conteúdo do PEB são inicializados pela chamada de sistema, a API nativa função que implementa parte, e sustenta, as Win32 , , , e bibliotecas de funções que estão no kernel32.dll e advapi32.dll bibliotecas , bem como subjacente à função na biblioteca POSIX do Windows NT , posix.dll.
NtCreateUserProcess()CreateProcess()CreateProcessAsUser()CreateProcessWithTokenW()CreateProcessWithLogonW()fork()
Para processos POSIX do Windows NT, o conteúdo de um novo processo 'PEB é inicializado simplesmente por uma cópia direta do processo pai' PEB, de acordo com a forma como a função opera. Para processos Win32, o conteúdo inicial do PEB de um novo processo é obtido principalmente de variáveis globais mantidas no kernel. No entanto, vários campos podem em vez disso ser feita a partir de informação fornecida dentro de ficheiro de imagem do processo, em particular, as informações fornecidas na estrutura de dados dentro do PE formato de arquivo (PE + ou PE32 + em 64 bits imagens executáveis).
NtCreateUserProcess()fork()IMAGE_OPTIONAL_HEADER32
| Campo | é inicializado de | substituível por informações de PE? |
|---|---|---|
NumberOfProcessors |
KeNumberOfProcessors |
Não |
NtGlobalFlag |
NtGlobalFlag |
Não |
CriticalSectionTimeout |
MmCriticalSectionTimeout |
Não |
HeapSegmentReserve |
MmHeapSegmentReserve |
Não |
HeapSegmentCommit |
MmHeapSegmentCommit |
Não |
HeapDeCommitTotalFreeThreshold |
MmHeapDeCommitTotalFreeThreshold |
Não |
HeapDeCommitFreeBlockThreshold |
MmHeapDeCommitFreeBlockThreshold |
Não |
MinimumStackCommit |
MmMinimumStackCommitInBytes |
Não |
ImageProcessAffinityMask |
KeActiveProcessors |
ImageLoadConfigDirectory.ProcessAffinityMask
|
OSMajorVersion |
NtMajorVersion |
OptionalHeader.Win32VersionValue & 0xFF
|
OSMinorVersion |
NtMinorVersion |
(OptionalHeader.Win32VersionValue >> 8) & 0xFF
|
OSBuildNumber |
NtBuildNumber & 0x3FFF combinado com CmNtCSDVersion
|
(OptionalHeader.Win32VersionValue >> 16) & 0x3FFF combinado com ImageLoadConfigDirectory.CmNtCSDVersion
|
OSPlatformId |
VER_PLATFORM_WIN32_NT |
(OptionalHeader.Win32VersionValue >> 30) ^ 0x2
|
O projeto WineHQ fornece uma definição PEB mais completa em sua versão do winternl.h. As versões posteriores do Windows ajustaram o número e a finalidade de alguns campos.
Referências
- ^ a b Rajeev Nagar (1997). Internos do sistema de arquivos do Windows NT: um guia do desenvolvedor . O'Reilly Series. O'Reilly. pp. 129 . ISBN 9781565922495.
- ^ a b c d "Estruturas de processo e rosca: Estrutura PEB" . Biblioteca MSDN . Microsoft . 15/07/2010. Arquivado do original em 22/10/2012 . Página visitada em 15/07/2010 .
- ^ a b c d e f Marca E. Russinovich , David A. Solomon, e Alex Ionescu (2009). Internos do Windows . Microsoft Press Series (5ª ed.). Microsoft Press. pp. 335-336, 341-342, 348, 357-358. ISBN 9780735625303.CS1 maint: vários nomes: lista de autores ( link )
- ^ "Estruturas de processos e threads: Estrutura RTL_USER_PROCESS_PARAMETERS" . Biblioteca MSDN . Microsoft . 15/07/2010 . Página visitada em 15/07/2010 .
- ^ "wine winternl.h: typedef struct _PEB" . GitHub . espelho de vinho. 29 de outubro de 2019.
- ^ Chappel, Geoff. "PEB" . Recuperado em 30 de outubro de 2019 .