fbpx
维基百科

进程环境块

进程环境块PEB)是 Windows NT操作系统内部使用的数据结构,用以存储每个进程运行时数据。[1] Microsoft的MSDN文档中仅公开了PEB的少数几个域,该结构“在未来的Windows版本中可能会修改”。[2]PEB包含的数据结构适用于整个进程,如全局上下文,启动参数,程序image装载器的数据结构,程序image的基地址,进程级互斥同步访问对象等。[1]

PEB与kernel mode EPROCESS数据结构密切相关。也是逐进程数据结构,在客户-服务器运行时子系统(CSRSS)进程地址空间被管理。但是,类似于CSRSS数据结构,PEB自身并不是内核模式数据结构。它驻留在所关联的进程的用户态内存空间中。这是因为它被设计为被操作系统的用户态的程序所使用,如NTDLL,在内核态之外执行,如程序映象的加载器与堆管理器。[3]

WinDbg中,卸载PEB内容的命令是!peb,命令参数是PEB在进程地址空间的地址,它实际上是通过!process命令获取,将显示来自于EPROCESS数据结构的信息,其中一个域是PEB地址。[3]

Microsoft文档公布的PEB的域[2]
含义 注释
BeingDebugged 进程是否被调试 Microsoft建议不要使用这个域,而是用Win32 CheckRemoteDebuggerPresent()库函数代替[2]
Ldr PEB_LDR_DATA结构的指针,提供被加载模块的信息。 包含kernel32 与ntdll的基地址
ProcessParameters RTL_USER_PROCESS_PARAMETERS结构的指针,提供进程起始参数信息。 这个RTL_USER_PROCESS_PARAMETERS结构几乎不透明,不保证在不同Windows版本一致[4]
PostProcessInitRoutine 为一个回调函数指针,在DLL被初始化后但DLLMain执行之前被调用 executable code is invoked 该回调函数被用于Windows 2000, 不保证以后Windows版本一致[2]
SessionId 进程所在的Terminal Services任务的ID 系统调用NtCreateUserProcess()通过调用内核内部的MmGetSession Id()函数来初始化它.[3]

PEB的内容通过系统调用NtCreateUserProcess()初始化。该系统调用也是Native API的Win32函数 CreateProcess(), CreateProcessAsUser(), CreateProcessWithTokenW(), CreateProcessWithLogonW() (在kernel32.dll 与advapi32.dll中)的实现基础,也是Windows NT POSIX的posix.dll中的API函数Fork()的实现基础.[3]

对于Windows NT POSIX进程,新进程的PEB内容通过简单直接复制父进程的PEB来初始化。NtCreateUserProcess() 这是在fork()函数内部实现。对于Win32进程,新进程的PEB的初始化主要来自内核维护的全局变量。但几个域的初始化来自程序映象,特别是来自PE文件格式(PE+ 或 PE32+在64位)的IMAGE_OPTIONAL_HEADER32数据结构。[3]

内核全局变量初始化的PEB的域[3]
初始化自... 是否被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 combined with CmNtCSDVersion (OptionalHeader.Win32VersionValue >> 16) & 0x3FFF combined with ImageLoadConfigDirectory.CmNtCSDVersion
OSPlatformId VER_PLATFORM_WIN32_NT (OptionalHeader.Win32VersionValue >> 30) ^ 0x2

参考文献 编辑

  1. ^ 1.0 1.1 Rajeev Nagar. Windows NT file system internals: a developer's guide. O'Reilly Series. O'Reilly. 1997: 129. ISBN 9781565922495. 
  2. ^ 2.0 2.1 2.2 2.3 . MSDN Library. Microsoft. 2010-07-15 [2010-07-15]. (原始内容存档于2012-10-22). 
  3. ^ 3.0 3.1 3.2 3.3 3.4 3.5 Mark E. Russinovich, David A. Solomon, and Alex Ionescu. Windows internals. Microsoft Press Series 5th. Microsoft Press. 2009: 335–336,341–342,348,357–358. ISBN 9780735625303. 
  4. ^ Process and Thread structures: RTL_USER_PROCESS_PARAMETERS Structure. MSDN Library. Microsoft. 2010-07-15 [2010-07-15]. (原始内容于2012-10-22). 

进程环境块, windows, nt操作系统内部使用的数据结构, 用以存储每个进程的运行时数据, microsoft的msdn文档中仅公开了peb的少数几个域, 该结构, 在未来的windows版本中可能会修改, peb包含的数据结构适用于整个进程, 如全局上下文, 启动参数, 程序image装载器的数据结构, 程序image的基地址, 进程级互斥同步访问对象等, peb与kernel, mode, span, class, eprocess, span, 数据结构密切相关, 也是逐进程数据结构, 在客户, 服务器. 进程环境块 PEB 是 Windows NT操作系统内部使用的数据结构 用以存储每个进程的运行时数据 1 Microsoft的MSDN文档中仅公开了PEB的少数几个域 该结构 在未来的Windows版本中可能会修改 2 PEB包含的数据结构适用于整个进程 如全局上下文 启动参数 程序image装载器的数据结构 程序image的基地址 进程级互斥同步访问对象等 1 PEB与kernel mode span class n EPROCESS span 数据结构密切相关 也是逐进程数据结构 在客户 服务器运行时子系统 CSRSS 进程地址空间被管理 但是 类似于CSRSS数据结构 PEB自身并不是内核模式数据结构 它驻留在所关联的进程的用户态内存空间中 这是因为它被设计为被操作系统的用户态的程序所使用 如NTDLL 在内核态之外执行 如程序映象的加载器与堆管理器 3 WinDbg中 卸载PEB内容的命令是 peb 命令参数是PEB在进程地址空间的地址 它实际上是通过 process命令获取 将显示来自于 span class n EPROCESS span 数据结构的信息 其中一个域是PEB地址 3 Microsoft文档公布的PEB的域 2 域 含义 注释BeingDebugged 进程是否被调试 Microsoft建议不要使用这个域 而是用Win32 span class n CheckRemoteDebuggerPresent span span class p span 库函数代替 2 Ldr 到 span class n PEB LDR DATA span 结构的指针 提供被加载模块的信息 包含kernel32 与ntdll的基地址ProcessParameters 到 span class n RTL USER PROCESS PARAMETERS span 结构的指针 提供进程起始参数信息 这个 span class n RTL USER PROCESS PARAMETERS span 结构几乎不透明 不保证在不同Windows版本一致 4 PostProcessInitRoutine 为一个回调函数指针 在DLL被初始化后但DLLMain执行之前被调用 executable code is invoked 该回调函数被用于Windows 2000 不保证以后Windows版本一致 2 SessionId 进程所在的Terminal Services任务的ID 系统调用 span class n NtCreateUserProcess span span class p span 通过调用内核内部的 span class n MmGetSession span span class w span span class n Id span span class p span 函数来初始化它 3 PEB的内容通过系统调用 span class n NtCreateUserProcess span span class p span 初始化 该系统调用也是Native API的Win32函数 span class n CreateProcess span span class p span span class n CreateProcessAsUser span span class p span span class n CreateProcessWithTokenW span span class p span span class n CreateProcessWithLogonW span span class p span 在kernel32 dll 与advapi32 dll中 的实现基础 也是Windows NT POSIX的posix dll中的API函数 a href Fork E7 B3 BB E7 BB 9F E8 B0 83 E7 94 A8 html title Fork 系统调用 Fork a 的实现基础 3 对于Windows NT POSIX进程 新进程的PEB内容通过简单直接复制父进程的PEB来初始化 span class n NtCreateUserProcess span span class p span 这是在 span class n fork span span class p span 函数内部实现 对于Win32进程 新进程的PEB的初始化主要来自内核维护的全局变量 但几个域的初始化来自程序映象 特别是来自PE文件格式 PE 或 PE32 在64位 的 span class n IMAGE OPTIONAL HEADER32 span 数据结构 3 内核全局变量初始化的PEB的域 3 域 初始化自 是否被PE信息覆盖 NumberOfProcessors KeNumberOfProcessors 否NtGlobalFlag NtGlobalFlag 否CriticalSectionTimeout MmCriticalSectionTimeout 否HeapSegmentReserve MmHeapSegmentReserve 否HeapSegmentCommit MmHeapSegmentCommit 否HeapDeCommitTotalFreeThreshold MmHeapDeCommitTotalFreeThreshold 否HeapDeCommitFreeBlockThreshold MmHeapDeCommitFreeBlockThreshold 否MinimumStackCommit MmMinimumStackCommitInBytes 否ImageProcessAffinityMask KeActiveProcessors span class n ImageLoadConfigDirectory span span class p span span class n ProcessAffinityMask span OSMajorVersion NtMajorVersion span class n OptionalHeader span span class p span span class n Win32VersionValue span span class w span span class o amp span span class w span span class mh 0xFF span OSMinorVersion NtMinorVersion span class p span span class n OptionalHeader span span class p span span class n Win32VersionValue span span class w span span class o gt gt span span class w span span class mi 8 span span class p span span class w span span class o amp span span class w span span class mh 0xFF span OSBuildNumber span class n NtBuildNumber span span class w span span class o amp span span class w span span class mh 0x3FFF span combined with CmNtCSDVersion span class p span span class n OptionalHeader span span class p span span class n Win32VersionValue span span class w span span class o gt gt span span class w span span class mi 16 span span class p span span class w span span class o amp span span class w span span class mh 0x3FFF span combined with span class n ImageLoadConfigDirectory span span class p span span class n CmNtCSDVersion span OSPlatformId span class n VER PLATFORM WIN32 NT span span class p span span class n OptionalHeader span span class p span span class n Win32VersionValue span span class w span span class o gt gt span span class w span span class mi 30 span span class p span span class w span span class o span span class w span span class mh 0x2 span 参考文献 编辑 1 0 1 1 Rajeev Nagar Windows NT file system internals a developer s guide O Reilly Series O Reilly 1997 129 ISBN 9781565922495 2 0 2 1 2 2 2 3 Process and Thread structures PEB Structure MSDN Library Microsoft 2010 07 15 2010 07 15 原始内容存档于2012 10 22 3 0 3 1 3 2 3 3 3 4 3 5 Mark E Russinovich David A Solomon and Alex Ionescu Windows internals Microsoft Press Series 5th Microsoft Press 2009 335 336 341 342 348 357 358 ISBN 9780735625303 Process and Thread structures RTL USER PROCESS PARAMETERS Structure MSDN Library Microsoft 2010 07 15 2010 07 15 原始内容存档于2012 10 22 取自 https zh wikipedia org w index php title 进程环境块 amp oldid 64175175, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。