背景: 使用波动率时,可以通过(死系统的)“ KDBG”扫描找到变量“ PsActiveProcessHead”,也可以在_DMP_HEADER的Windows Crash Dump(再次死系统)上找到它。
在实时系统中,可以通过以下方式找到此符号的地址: (lkd >> x nt!PsActiveProcessHead)
问题: “ nt!PsActiveProcessHead”变量属于/引用到哪个Windows内核对象/结构? (此符号指向哪个对象/结构?)
例如,“ ActiveProcessLinks”也是“ _LIST_ENTRY”结构(与“ ActiveProcessHead”相同)属于_EPROCESS对象。 “ ActiveProcessHead”是否也有这样的对象?
谢谢
答案 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....]
中的双向链接列表。