Windbg查看进程的_EPROCESS结构

最近研究某驱动DebugPort清零,学习了使用Windbg查看_EPROCESS结构地址,采用Syser下断查找清零代码。

下面主要写下Windbg查看进程的_EPROCESS结构,便以后查阅。

大家知道,每一个进程都对应一个_EPROCESS结构,我们如何确定一个进程的_EPROCESS地址呢?以notepad.exe为例

使用Windbg的Kernel Debug,输入命令

lkd> !process 0 0    //查看当前进程
PROCESS 8a5e7088 SessionId: 0 Cid: 0ff0    Peb: 7ffdd000 ParentCid: 0324
    DirBase: 0ac40520 ObjectTable: e1a13a30 HandleCount: 65.
    Image: windbg.exe

PROCESS 882f2650 SessionId: 0 Cid: 07d8    Peb: 7ffd7000 ParentCid: 0324
    DirBase: 0ac404e0 ObjectTable: e506af88 HandleCount: 48.
    Image: notepad.exe
。。。。。

可以看到 PROCESS 882f2650,882f2650就是notepad.exe的_EPROCESS结构地址

lkd> dt _eprocess 882f2650   //查看notepad.exe的_EPROCESS
nt!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x06c ProcessLock      : _EX_PUSH_LOCK
   +0x070 CreateTime       : _LARGE_INTEGER 0x1cb68eb`1575a5ee
   +0x078 ExitTime         : _LARGE_INTEGER 0x0
   +0x080 RundownProtect   : _EX_RUNDOWN_REF
   +0x084 UniqueProcessId : 0x000007d8 Void
   +0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x805648b8 - 0x8a5e7110 ]
   +0x090 QuotaUsage       : [3] 0xc58
   +0x09c QuotaPeak        : [3] 0x1080
   +0x0a8 CommitCharge     : 0x220
   +0x0ac PeakVirtualSize : 0x2453000
   +0x0b0 VirtualSize      : 0x22bf000
   +0x0b4 SessionProcessLinks : _LIST_ENTRY [ 0xba632014 - 0x8a5e713c ]
   +0x0bc DebugPort        : (null)
   +0x0c0 ExceptionPort    : 0xe1be7658 Void
   +0x0c4 ObjectTable      : 0xe506af88 _HANDLE_TABLE
   +0x0c8 Token            : _EX_FAST_REF
   +0x0cc WorkingSetLock   : _FAST_MUTEX
   +0x0ec WorkingSetPage   : 0x7bbc2
   +0x0f0 AddressCreationLock : _FAST_MUTEX
   +0x110 HyperSpaceLock   : 0
   +0x114 ForkInProgress   : (null)
   +0x118 HardwareTrigger : 0
   +0x11c VadRoot          : 0x8a626df0 Void
   +0x120 VadHint          : 0x88380130 Void
   +0x124 CloneRoot        : (null)

_EPROCESS + bc处为Debugprot地址,可以使用Syser下断
bpm 882f2650+bc w 断在notepad.exe的DebugPort处,如有对它的处理就会断住。。

第一次发帖,写得比较简单,留待参考。

你可能感兴趣的:(学习心得)