从pid找到EPROCESS,NtOpenProcess是这么找的

lkd> dd nt!PspCidTable
8056a760  e1001ca8 00000002 00000001 00000000 // PspCidTable就是一个Handle_Table
8056a770  00000000 00000000 00000000 00000000
8056a780  e137052f 00000000 00000000 00000000

lkd> dt nt!_handle_table e1001ca8
   +0x000 TableCode        : 0xe1206001 // TableCode 的用处在另一篇关于句柄表的文章
   +0x004 QuotaProcess     : (null) // 这个句柄表是没有所属进程的
   +0x008 UniqueProcessId  : (null)
   +0x00c HandleTableLock  : [4] _EX_PUSH_LOCK
   +0x01c HandleTableList  : _LIST_ENTRY [ 0xe1001cc4 - 0xe1001cc4 ]
   +0x024 HandleContentionEvent : _EX_PUSH_LOCK
   +0x028 DebugInfo        : (null)
   +0x02c ExtraInfoPages   : 0
   +0x030 FirstFree        : 0xadc
   +0x034 LastFree         : 0xa00
   +0x038 NextHandleNeedingPool : 0x1000
   +0x03c HandleCount      : 897
   +0x040 Flags            : 1
   +0x040 StrictFIFO       : 0y1
lkd> dd 0xe1206000
e1206000  e1005000 e1211000 00000000 00000000 // 两张句柄表
e1206010  00000000 00000000 00000000 00000000
e1206020  00000000 00000000 00000000 00000000

用explorer的PID查一下,pid是364(10进制),乘2转16进制,每个0级表只能存512项,算好在哪个表

lkd> dd e1005000+2d8
e10052d8  894389d1 00000000 8938b199 00000000
e10052e8  89027881 00000000 893a8021 00000000
e10052f8  8942eb31 00000000 891dca21 00000000

lkd> dt nt!_eprocess 894389d1-1

   +0x168 Filler           : 0
   +0x170 Session          : 0xf79a5000
   +0x174 ImageFileName    : [16]  "explorer.exe"

为什么减1?不知道,xp sp3就是这样

你可能感兴趣的:(c,session,list,XP,table,null)