什么是nt!PsActiveProcessHead?

时间:2019-02-11 13:25:58

标签: windows kernel windbg kernel-module

背景: 使用波动率时,可以通过(死系统的)“ KDBG”扫描找到变量“ PsActiveProcessHead”,也可以在_DMP_HEADER的Windows Crash Dump(再次死系统)上找到它。

在实时系统中,可以通过以下方式找到此符号的地址: (lkd >> x nt!PsActiveProcessHead)

问题: “ nt!PsActiveProcessHead”变量属于/引用到哪个Windows内核对象/结构? (此符号指向哪个对象/结构?)

例如,“ ActiveProcessLinks”也是“ _LIST_ENTRY”结构(与“ ActiveProcessHead”相同)属于_EPROCESS对象。 “ ActiveProcessHead”是否也有这样的对象?

谢谢

1 个答案:

答案 0 :(得分:0)

是的,它还指向一个双向链接列表(this.ds.serviceCall(detailParameters).pipe( map(t=> t.filter((t: any)=> { return t.address.filter((a:any) => { return a.LocationOptions.filter((loc:any) => { return loc.OpenToPublic === 'Open'; }).length > 0; }).length > 0; return false; } ))).subscribe(t=> this.result = t); } ),更精确地指向_LIST_ENTRY

检查_EPROCESS.ActiveProcessLinks指向的双向链表:

nt!PsActiveProcessHead

下一个条目:

0: kd> dt nt!_list_entry poi(nt!PsActiveProcessHead)
 [ 0xffffc582`ca5c3328 - 0xfffff804`40c10680 ]
   +0x000 Flink            : 0xffffc582`ca5c3328 _LIST_ENTRY [ 0xffffc582`d11d1328 - 0xffffc582`ca4b15e8 ]
   +0x008 Blink            : 0xfffff804`40c10680 _LIST_ENTRY [ 0xffffc582`ca4b15e8 - 0xffffc582`edada368 ]

获取0: kd> dt nt!_list_entry poi(0xffffc582`ca5c3328) [ 0xffffc582`d0023428 - 0xffffc582`ca5c3328 ] +0x000 Flink : 0xffffc582`d0023428 _LIST_ENTRY [ 0xffffc582`d54243a8 - 0xffffc582`d11d1328 ] +0x008 Blink : 0xffffc582`ca5c3328 _LIST_ENTRY [ 0xffffc582`d11d1328 - 0xffffc582`ca4b15e8 ] ActiveProcessLink结构中的偏移量:

_EPROCESS

只需通过上述输出中的前两个flink进行确认(请注意:我们从拥有的地址中删除0: kd> ? @@c++(#FIELD_OFFSET(nt!_eprocess, ActiveProcessLinks)) Evaluate expression: 744 = 00000000`000002e8 的偏移量,然后从EPROCESS结构中转储ActiveProcessLinks) 。它只是证明它确实指向ImageFileName中的ActiveProcessLinks

_EPROCESS

转储整个列表:

0: kd> dt nt!_eprocess 0xffffc582`ca5c3328-@@c++(#FIELD_OFFSET(nt!_eprocess , ActiveProcessLinks)) ImageFileName
   +0x450 ImageFileName : [15]  "Registry"

0: kd> dt nt!_eprocess 0xffffc582`d0023428-@@c++(#FIELD_OFFSET(nt!_eprocess , ActiveProcessLinks)) ImageFileName
   +0x450 ImageFileName : [15]  "csrss.exe"

因此,基本上,它是当前活动进程的列表。它指向0: kd> !list "-t nt!_eprocess.ActiveProcessLinks.Flink -e -x \"dt nt!_eprocess ImageFileName\"(poi(nt!PsActiveProcessHead) - @@c++(#FIELD_OFFSET(nt!_eprocess, ActiveProcessLinks)))" dt nt!_EPROCESS ImageFileName 0xffffc582ca4b1300 +0x450 ImageFileName : [15] "System" dt nt!_EPROCESS ImageFileName 0xffffc582ca5c3040 +0x450 ImageFileName : [15] "Registry" dt nt!_EPROCESS ImageFileName 0xffffc582d11d1040 +0x450 ImageFileName : [15] "smss.exe" dt nt!_EPROCESS ImageFileName 0xffffc582d0023140 +0x450 ImageFileName : [15] "csrss.exe" [...snip....] 中的双向链接列表。