프로세스 환경 블록
Process Environment Block프로세스 환경 블록(PEB)은 Windows NT 운영체제 패밀리의 데이터 구조입니다.이는 운영 체제에서 내부적으로 사용되는 불투명한 데이터 구조이며, 대부분의 필드는 운영 [1]체제 이외의 다른 사용자가 사용할 수 없습니다.Microsoft 는, MSDN 라이브러리의 메뉴얼(몇개의 필드만을 문서화한 것)에서, 이 구조가 「향후 버전의 Windows [2]로 변경될 가능성이 있다」라고 하고 있습니다.PEB에는 글로벌콘텍스트, 스타트업 파라미터, 프로그램이미지 로더의 데이터 구조, 프로그램이미지 베이스 주소, 프로세스 전체의 데이터 [1]구조 상호 제외에 사용되는 동기화 오브젝트 등 프로세스 전체에 적용되는 데이터 구조가 포함되어 있습니다.
PEB는 커널 모드와 밀접하게 관련되어 있습니다. EPROCESS클라이언트-서버 런타임 서브시스템 프로세스의 주소 공간 내에서 관리되는 프로세스별 데이터 구조뿐만 아니라 데이터 구조도 포함합니다.단, (CSRSS 데이터 구조와 마찬가지로) PEB는 커널 모드 데이터 구조 자체가 아닙니다.관련된 프로세스의 응용 프로그램모드 주소 공간에 있습니다.이는 NTDLL과 같은 운영체제라이브러리의 애플리케이션 모드코드에 의해 사용되도록 설계되어 프로그램이미지 로더나 힙 [3]매니저의 코드와 같은 커널 모드 밖에서 실행되기 때문입니다.
WinDbg에서는 PEB의 내용을 덤프하는 명령어는!peb이 명령어는 프로세스의 응용 프로그램주소 공간 내에서 PEB의 주소를 전달합니다.그 정보는, 차례로, 에 의해서 취득됩니다.!process명령어: 이 명령어에서는EPROCESS그 중 하나의 필드가 [3]PEB의 주소인 데이터 구조.
| 들판 | 의미. | 메모들 |
|---|---|---|
BeingDebugged | 프로세스가 디버깅되고 있는지 여부 | Microsoft는 이 필드를 사용하지 않고 공식 Win32를 사용할 것을 권장합니다.CheckRemoteDebuggerPresent()대신 [2]라이브러리 기능을 수행합니다. |
| 드라이브 | 에 대한 포인터PEB_LDR_DATA로드된 모듈에 대한 정보를 제공하는 구조 | kernel32 및 ntdll의 기본 주소를 포함합니다. |
| 프로세스 파라미터 | 에 대한 포인터RTL_USER_PROCESS_PARAMETERS프로세스 시작 매개 변수에 대한 정보를 제공하는 구조 | 그RTL_USER_PROCESS_PARAMETERS또한 구조는 대부분 불투명하며 여러 [4]버전의 Windows에서 일관성이 보장되지 않습니다. |
| 후처리InitRoutine(InitRoutine) | DLL 초기화 후 주 실행 가능 코드가 호출되기 전에 호출된 콜백 함수에 대한 포인터 | 이 콜백 함수는 Windows 2000 에서는 사용되고 있습니다만, 그 이후의 Windows [2]NT 버전에서는 사용할 수 없는 것이 보증되고 있습니다. |
| 세션 ID | 프로세스가 속한 터미널 서비스 세션의 세션 ID | 그NtCreateUserProcess()시스템 호출은 커널의 내부 호출을 통해 이를 초기화합니다.MmGetSessionId()기능합니다.[3] |
PEB의 내용은 에 의해 초기화됩니다.NtCreateUserProcess()시스템 콜, Win32의 일부 및 언더핀을 구현하는 네이티브 API 함수CreateProcess(),CreateProcessAsUser(),CreateProcessWithTokenW(),그리고.CreateProcessWithLogonW()kernel32.diag 및 advapi32.diag 라이브러리에 있는 라이브러리 함수와 함께,fork()Windows NT POSIX 라이브러리의 posix.dll에서 [3]기능합니다.
Windows NT POSIX 프로세스의 경우, 새로운 프로세스의 PEB의 내용은 다음과 같이 초기화됩니다.NtCreateUserProcess()단순히 부모 프로세스의 PEB의 직접 복사로서, 어떻게 하면fork()기능이 동작합니다.Win32 프로세스의 경우, 새로운 프로세스의 PEB의 초기 내용은 주로 커널 내에서 유지되는 글로벌 변수에서 가져옵니다.단, 프로세스 이미지 파일 내에서 제공되는 정보, 특히 에서 제공되는 정보에서 여러 필드를 대신 가져올 수 있습니다.IMAGE_OPTIONAL_HEADER32PE 파일 형식 내의 데이터 구조(64비트 실행 [3]가능 이미지의 PE+ 또는 PE32+).
| 들판 | 에서 초기화됩니다. | PE 정보로 덮어쓸 수 있습니까? |
|---|---|---|
NumberOfProcessors | KeNumberOfProcessors | 아니요. |
NtGlobalFlag | NtGlobalFlag | 아니요. |
CriticalSectionTimeout | MmCriticalSectionTimeout | 아니요. |
HeapSegmentReserve | MmHeapSegmentReserve | 아니요. |
HeapSegmentCommit | MmHeapSegmentCommit | 아니요. |
HeapDeCommitTotalFreeThreshold | MmHeapDeCommitTotalFreeThreshold | 아니요. |
HeapDeCommitFreeBlockThreshold | MmHeapDeCommitFreeBlockThreshold | 아니요. |
MinimumStackCommit | MmMinimumStackCommitInBytes | 아니요. |
ImageProcessAffinityMask | KeActiveProcessors | ImageLoadConfigDirectory.ProcessAffinityMask |
OSMajorVersion | NtMajorVersion | OptionalHeader.Win32VersionValue & 0xFF |
OSMinorVersion | NtMinorVersion | (OptionalHeader.Win32VersionValue >> 8) & 0xFF |
OSBuildNumber | NtBuildNumber & 0x3FFF와 조합하여CmNtCSDVersion | (OptionalHeader.Win32VersionValue >> 16) & 0x3FFF와 조합하여ImageLoadConfigDirectory.CmNtCSDVersion |
OSPlatformId | VER_PLATFORM_WIN32_NT | (OptionalHeader.Win32VersionValue >> 30) ^ 0x2 |
와인HQ 프로젝트에서는 Winternl.[5]h 버전에서 보다 완전한 PEB 정의를 제공합니다.이후 버전의 Windows에서는 일부 [6]필드의 수와 용도가 조정되었습니다.
레퍼런스
- ^ a b Rajeev Nagar (1997). Windows NT file system internals: a developer's guide. O'Reilly Series. O'Reilly. pp. 129. ISBN 9781565922495.
- ^ a b c d "Process and Thread structures: PEB Structure". MSDN Library. Microsoft. 2010-07-15. Archived from the original on 2012-10-22. Retrieved 2010-07-15.
- ^ a b c d e f Mark E. Russinovich, David A. Solomon, and Alex Ionescu (2009). Windows internals. Microsoft Press Series (5th ed.). Microsoft Press. pp. 335–336, 341–342, 348, 357–358. ISBN 9780735625303.
{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크) - ^ "Process and Thread structures: RTL_USER_PROCESS_PARAMETERS Structure". MSDN Library. Microsoft. 2010-07-15. Retrieved 2010-07-15.
- ^ "wine winternl.h: typedef struct _PEB". GitHub. wine-mirror. 29 October 2019.
- ^ Chappel, Geoff. "PEB". Retrieved 30 October 2019.