Windows WinDBG !process 命令

查看有关指定进程或者所有进程的信息,包括 EPROCESS 块。

##语法

!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName
欢迎来到之路教程(on itroad-com)

示例

kd> !process 0 0
 NT ACTIVE PROCESS DUMP 
PROCESS 80a02a60  Cid: 0002    Peb: 00000000  ParentCid: 0000
    DirBase: 00006e05  ObjectTable: 80a03788  TableSize: 150.
    Image: System
PROCESS 80986f40  Cid: 0012    Peb: 7ffde000  ParentCid: 0002
    DirBase: 000bd605  ObjectTable: 8098fce8  TableSize:  38.
    Image: smss.exe
PROCESS 80958020  Cid: 001a    Peb: 7ffde000  ParentCid: 0012
    DirBase: 0008b205  ObjectTable: 809782a8  TableSize: 150.
    Image: csrss.exe
PROCESS 80955040  Cid: 0020    Peb: 7ffde000  ParentCid: 0012
    DirBase: 00112005  ObjectTable: 80955ce8  TableSize:  54.
    Image: winlogon.exe
PROCESS 8094fce0  Cid: 0026    Peb: 7ffde000  ParentCid: 0020
    DirBase: 00055005  ObjectTable: 80950cc8  TableSize: 222.
    Image: services.exe
PROCESS 8094c020  Cid: 0029    Peb: 7ffde000  ParentCid: 0020
    DirBase: 000c4605  ObjectTable: 80990fe8  TableSize: 110.
    Image: lsass.exe
PROCESS 809258e0  Cid: 0044    Peb: 7ffde000  ParentCid: 0026
    DirBase: 001e5405  ObjectTable: 80925c68  TableSize:  70.
    Image: SPOOLSS.EXE

输出说明

Process address

PROCESS 后面的八位十六进制数是 EPROCESS 块的地址。在前面示例的最后一个条目中,进程地址是 0x809258E0。

Process ID (PID)

单词 Cid 后的十六进制数。在前面示例的最后一个条目中,PID 是 0x44,或者十进制 68。

Process Environment Block (PEB)

Peb后面的十六进制数是进程环境块的地址。在前面示例的最后一个条目中,PEB 位于地址 0x7FFDE000。

Parent process PID

ParentCid 后面的十六进制数是父进程的PID。在前面示例的最后一个条目中,父进程 PID 是 0x26,或者十进制 38。

Image

拥有进程的模块的名称。在前面示例的最后一个条目中,所有者是 spoolss.exe。在第一个条目中,所有者是操作系统本身。

Process object address

单词 ObjectTable 之后的十六进制数。在前面示例的最后一个条目中,进程对象的地址是 0x80925c68。

示例2

要显示一个进程的完整详细信息,请将Flags设置为 7。
可以通过将Process设置为进程地址、将Process设置为进程 ID 或者将ImageName设置为可执行镜像名称来指定进程本身。

kd> !process fb667a00 7
PROCESS fb667a00 Cid: 0002  Peb: 00000000 ParentCid: 0000
  DirBase: 00030000 ObjectTable: e1000f88 TableSize: 112.
  Image: System
  VadRoot fb666388 Clone 0 Private 4. Modified 9850. Locked 0.
  FB667BBC MutantState Signalled OwningThread 0
  Token               e10008f0
  ElapsedTime            15:06:36.0338
  UserTime             0:00:00.0000
  KernelTime            0:00:54.0818
  QuotaPoolUsage[PagedPool]     1480
Working Set Sizes (now,min,max) (3, 50, 345)
  PeakWorkingSetSize        118
  VirtualSize            1 Mb
  PeakVirtualSize          1 Mb
  PageFaultCount          992
  MemoryPriority          BACKGROUND
  BasePriority           8
  CommitCharge           8

    THREAD fb667780 Cid 2.1 Teb: 00000000 Win32Thread: 80144900 WAIT: (WrFreePage) KernelMode Non-Alertable
    80144fc0 SynchronizationEvent
    Not impersonating
    Owning Process fb667a00
    WaitTime (seconds)   32278
    Context Switch Count  787
    UserTime         0:00:00.0000
    KernelTime        0:00:21.0821
    Start Address Phase1Initialization (0x801aab44)
    Initial Sp fb26f000 Current Sp fb26ed00
    Priority 0 BasePriority 0 PriorityDecrement 0 DecrementCount 0

    ChildEBP RetAddr Args to Child
    fb26ed18 80118efc c0502000 804044b0 00000000 KiSwapThread+0xb5
    fb26ed3c 801289d9 80144fc0 00000008 00000000 KeWaitForSingleObject+0x1c2

输出说明

WAIT
此标题后的括号注释给出了等待的原因。命令dt nt!_KWAIT_REASON将显示所有等待原因的列表。

ElapsedTime

列出自进程创建以来经过的时间量。这以小时:分钟:秒.毫秒为单位显示。

UserTime

列出进程在用户模式下运行的时间。如果 UserTime 的值特别高,则它可能标识正在耗尽系统资源的进程。单位与 ElapsedTime 相同。

KernelTime

列出进程在内核模式下运行的时间。如果 KernelTime 的值特别高,它可能会识别一个正在耗尽系统资源的进程。单位与 ElapsedTime 相同。

Working Set sizes

以页为单位列出进程的当前、最小和最大工作集大小。异常大的工作集大小可能表示进程正在泄漏内存或者耗尽系统资源。

QuotaPoolUsage 条目

列出进程使用的分页和非分页池。在存在内存泄漏的系统上,查找所有进程上过多的非分页池使用情况可以告诉您哪个进程存在内存泄漏。

Clone

指示进程是否由 POSIX 或者 Interix 子系统创建。

Private

指示进程当前使用的私有(不可共享)页面的数量。这包括调入和调出内存。

参数

/s Session
指定拥有所需进程的会话。

/m Module
指定拥有所需进程的模块。

Process
指定目标计算机上进程的十六进制地址或者进程 ID。

Process的值决定了 !process 扩展名是显示进程地址还是进程 ID。如果在任何版本的 Windows 中省略Process,则调试器仅显示有关当前系统进程的数据。如果Process为 0 并且省略ImageName,调试器将显示有关所有活动进程的信息。如果为进程指定-1,则显示有关当前进程的信息。

Flags
指定要显示的详细程度。标志可以是以下位的任意组合。如果Flags为 0,则仅显示最少量的信息。默认值因 Windows 版本和Process的值而异。如果Process被省略或者Process为 0 或者 -1,则默认值为 0x3 ;否则,默认值为 0xF。

位 0 (0x1)
显示时间和优先级统计信息。

位 1 (0x2)
显示与进程关联的线程和事件及其等待状态的列表。

位 2 (0x4)
显示与进程关联的线程列表。如果这包括没有位 1 (0x2),则每个线程都显示在一行上。如果这与位 1 一起包含,则每个线程都显示有堆栈跟踪。

位 3 (0x8)
显示每个函数的返回地址和堆栈指针 函数参数的显示被抑制。

位 4 (0x10)
在此命令的持续时间内将进程上下文设置为等于指定进程。这样可以更准确地显示线程堆栈。因为这个标志相当于对指定的进程使用.process /p /r,任何现有的用户模式模块列表都将被丢弃。如果Process为零,则调试器显示所有进程,并且每个进程的进程上下文都会更改。如果您只显示单个进程并且其用户模式状态已经刷新(例如,使用.process /p /r),则没有必要使用此标志。此标志仅在与位 0 (0x1) 一起使用时有效。

ImageName
指定要显示的进程的名称。调试器显示可执行镜像名称与ImageName匹配的所有进程。镜像名称必须与 EPROCESS 块中的名称匹配。通常,这是为启动进程而调用的可执行文件名称,包括文件扩展名(通常为 .exe),并在第十五个字符后被截断。无法指定包含空格的图像名称。当ImageName被指定时,过程必须为零。

日期:2020-09-17 00:15:32 来源:oir作者:oir