第一部分:
1: kd> dd 89be7f10
89be7f10 89be8120 89be8350 c03dea20 00001325
89be7f20 000764e5 89be8100 c03dea74 0000136b
89be7f30 00076494 89be7fe0 c03dea24 00001331
89be7f40 000764ac 89be7ef0 c03deafc 0000133e
89be7f50 0000002a 89be7db0 c02eade4 0000134f
89be7f60 000764bf 89be8940 c03de9f0 0000134a
89be7f70 000764aa 89be83a0 c03de970 0000133e
89be7f80 89be8240 89be81a0 c03de9d8 00001325
1: kd> dd 89be8120
89be8120 89be81a0 89be7f10 c03de9bc 00001325
89be8130 000764b2 89be83c0 c03de9a8 0000133e
89be8140 000764cb 89be7d20 c03dea18 00001355
89be8150 00000057 89be8700 c03de6bc 00001369
89be8160 000764ee 89be8110 c03de9e8 0000136b
89be8170 000764d4 89be7f90 c03de9dc 00001363
89be8180 000764c1 89be8930 c03de944 0000134a
89be8190 000764f2 89be8910 c03dea0c 0000136b
1: kd> dd c03de9bc
c03de9bc 7b2da963 00000000 00000000 00000000
c03de9cc 00000000 00000000 00000000 00518963
c03de9dc 00000000 00000000 00000000 00000000
c03de9ec 00000000 00000000 00000000 7b21c963
c03de9fc 00000000 7b2d0963 00000000 00000000
c03dea0c 00000000 00000000 00000000 00000000
c03dea1c 00000000 7b19b963 00000000 00000000
c03dea2c 00000000 00000000 7fef097b 00000000
1: kd> !dc 7b2da000
#7b2da000 68532e5b 436c6c65 7373616c 6f666e49 [.ShellClassInfo
#7b2da010 4c0a0d5d 6c61636f 64657a69 6f736552 ]..LocalizedReso
#7b2da020 65637275 656d614e 5325403d 65747379 urceName=@%Syste
#7b2da030 6f6f526d 735c2574 65747379 5c32336d mRoot%\system32\
#7b2da040 6c656873 2e32336c 2c6c6c64 3731322d shell32.dll,-217
#7b2da050 0a0d3738 00000000 00000000 00000000 87..............
#7b2da060 00000000 00000000 00000000 00000000 ................
#7b2da070 00000000 00000000 00000000 00000000 ................
1: kd> dd 89be81a0
89be81a0 89be7f80 89be8120 c03deaa8 00001325
89be81b0 000764f6 89be8390 c03deaac 0000136c
89be81c0 000764c6 89be7da0 c03dea28 0000134a
89be81d0 000764e9 89be8280 c03dea88 0000136b
89be81e0 000764ed 89be8160 c03dea90 0000136b
89be81f0 0007649a 89be7fd0 c02eb898 0000133e
89be8200 000764c5 89be81c0 c03de948 0000134a
89be8210 000764ae 89be8000 c03deac8 0000133e
1: kd> dd c03deaa8
c03deaa8 00ed9963 00000000 00000000 00000000
c03deab8 00000000 00000000 00000000 00000000
c03deac8 00000000 00000000 00000000 00000000
c03dead8 00000000 00000000 00000000 00000000
c03deae8 00000000 7fef097b 00000000 00000000
c03deaf8 00000000 00000000 00517963 00e16963
c03deb08 00000000 fffff000 0011c000 00000000
c03deb18 00000000 00000000 00000000 00000000
1: kd> !dc ed9000
# ed9000 636f4c5b 7a696c61 69466465 614e656c [LocalizedFileNa
# ed9010 5d73656d 69570a0d 776f646e 78452073 mes]..Windows Ex
# ed9020 726f6c70 6c2e7265 403d6b6e 73795325 plorer.lnk=@%Sys
# ed9030 526d6574 25746f6f 7379735c 336d6574 temRoot%\system3
# ed9040 68735c32 336c6c65 6c642e32 322d2c6c 2\shell32.dll,-2
# ed9050 37363032 6f430a0d 6e616d6d 72502064 2067..Command Pr
# ed9060 74706d6f 6b6e6c2e 5325403d 65747379 ompt.lnk=@%Syste
# ed9070 6f6f526d 735c2574 65747379 5c32336d mRoot%\system32\
1: kd> dd 89be7f80
89be7f80 89be8240 89be81a0 c03de9d8 00001325
1: kd> dd 0x89be5008
89be5008 0007648c 89be8350 000764f6 89be8390
89be5018 80b236b8 00000000
1: kd> dd 80b236b8
80b236b8 89be7f10 68460209
1: kd> dt _NBQUEUE_HEADER -r
nt!_NBQUEUE_HEADER
+0x000 Head : _NBQUEUE_POINTER 正在使用的系统PTE
+0x000 Count : Int4B
+0x004 Node : Int4B
+0x000 Data : Int8B
+0x008 Tail : _NBQUEUE_POINTER
+0x000 Count : Int4B
+0x004 Node : Int4B
+0x000 Data : Int8B
+0x010 SlistHead : Ptr32 _SLIST_HEADER 刚刚使用的系统PTE
+0x000 Alignment : Uint8B
+0x000 Next : _SINGLE_LIST_ENTRY
+0x000 Next : Ptr32 _SINGLE_LIST_ENTRY
+0x004 Depth : Uint2B
+0x006 Sequence : Uint2B
#define InterlockedPushEntrySList(Head, Entry) \
ExpInterlockedPushEntrySList(Head, Entry)
NTKERNELAPI
PSLIST_ENTRY
ExpInterlockedPushEntrySList (
IN PSLIST_HEADER ListHead,
IN PSLIST_ENTRY ListEntry
);
第二部分:
nt!ExRemoveHeadNBQueue函数把头指向的第一节点放到单链表中,第二节点选中了返回,头指向第二节点。
1: kd> p
nt!MmMapLockedPagesSpecifyCache+0x20f:
80a98491 e8ecb00500 call nt!ExRemoveHeadNBQueue (80af3582)
1: kd> t
nt!ExRemoveHeadNBQueue:
80af3582 55 push ebp
1: kd> dv
Header = 0x89be5008
Value = 0xf705f85c
Next = union _NBQUEUE_POINTER
HeadNode = 0x89be5008
Head = union _NBQUEUE_POINTER
Tail = union _NBQUEUE_POINTER
Insert = union _NBQUEUE_POINTER
1: kd> dt NBQUEUE_HEADER 0x89be5008
Symbol NBQUEUE_HEADER not found.
1: kd> dt _NBQUEUE_HEADER 0x89be5008
nt!_NBQUEUE_HEADER
+0x000 Head : _NBQUEUE_POINTER
+0x008 Tail : _NBQUEUE_POINTER
+0x010 SlistHead : 0x80b236b8 _SLIST_HEADER
1: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_NBQUEUE_POINTER *)0x89be5008))
(*((ntkrnlmp!_NBQUEUE_POINTER *)0x89be5008)) [Type: _NBQUEUE_POINTER]
[+0x000] Count : 484491 [Type: long]
[+0x004] Node : -1984004336 [Type: long]
[+0x000] Data : -8521233738241710965 [Type: __int64]
1: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_NBQUEUE_POINTER *)0x89be5010))
(*((ntkrnlmp!_NBQUEUE_POINTER *)0x89be5010)) [Type: _NBQUEUE_POINTER]
[+0x000] Count : 484598 [Type: long]
[+0x004] Node : -1984003184 [Type: long]
[+0x000] Data : -8521228790439385866 [Type: __int64]
1: kd> dd 0x89be5008
89be5008 0007648b 89be7f10 000764f6 89be8390
89be5018 80b236b8 00000000 00020004 00000000
89be5028 899a1289 89be5d81 0a080002 64546553
89be5038 899a28e8 80b1a110 8999e290 00000000
89be5048 00000000 00000000 00000000 00000000
89be5058 00000000 00000000 00000000 00000000
89be5068 00000000 00000000 0a0e0008 644c6d4d
89be5078 899c8008 89be50e8 ffffffff ffffffff
1: kd> dd 89be7f10
89be7f10 0007648c 89be8350 c03dea20 00001325
89be7f20 000764e5 89be8100 c03dea74 0000136b
89be7f30 00076494 89be7fe0 c03dea24 00001331
89be7f40 000764ac 89be7ef0 c03deafc 0000133e
89be7f50 0000002a 89be7db0 c02eade4 0000134f
89be7f60 000764bf 89be8940 c03de9f0 0000134a
89be7f70 000764aa 89be83a0 c03de970 0000133e
89be7f80 89be8240 89be81a0 c03de9d8 00001325
1: kd> dd 89be8350
89be8350 0007648d 89be7ec0 c03de9f8 00001325
89be8360 89be82f0 89be8050 c03dea00 00001325
89be8370 000764da 89be7d40 c03deae0 00001369
89be8380 000764c9 89be8310 c03dea54 00001355
89be8390 000764f6 00000000 c03dea50 0000136d
89be83a0 000764ab 89be7f40 c03de960 0000133e
89be83b0 000764dc 89be82b0 c03dea84 00001369
89be83c0 000764b3 89be80f0 c03dea80 0000133e
之后:
1: kd> x nt!MiSystemPteNBHead
80b23680 nt!MiSystemPteNBHead = void *[5]
1: kd> dx -r1 (*((ntkrnlmp!void * (*)[5])0x80b23680))
(*((ntkrnlmp!void * (*)[5])0x80b23680)) [Type: void * [5]]
[0] : 0x89be5008 [Type: void *]
[1] : 0x89be5fe8 [Type: void *]
[2] : 0x89be5fc8 [Type: void *]
[3] : 0x89be5fa8 [Type: void *]
[4] : 0x89be5f88 [Type: void *]
1: kd> dd 0x89be5008
89be5008 0007648c 89be8350 000764f6 89be8390
89be5018 80b236b8 00000000 00020004 00000000
89be5028 899a1289 89be5d81 0a080002 64546553
89be5038 899a28e8 80b1a110 8999e290 00000000
89be5048 00000000 00000000 00000000 00000000
89be5058 00000000 00000000 00000000 00000000
89be5068 00000000 00000000 0a0e0008 644c6d4d
89be5078 899c8008 89be50e8 ffffffff ffffffff
1: kd> dd 89be8350
89be8350 0007648d 89be7ec0 c03de9f8 00001325
89be8360 89be82f0 89be8050 c03dea00 00001325
89be8370 000764da 89be7d40 c03deae0 00001369
89be8380 000764c9 89be8310 c03dea54 00001355
89be8390 000764f6 00000000 c03dea50 0000136d
89be83a0 000764ab 89be7f40 c03de960 0000133e
89be83b0 000764dc 89be82b0 c03dea84 00001369
89be83c0 000764b3 89be80f0 c03dea80 0000133e
1: kd> dd 89be7ec0
89be7ec0 0007648e 89be7ff0 c03de96c 00001325
89be7ed0 89be7e80 89be7ec0 c03de9a8 00000167
89be7ee0 0000002d 89be88f0 c02ead24 0000134f
89be7ef0 000764ad 89be8210 c03dea48 0000133e
89be7f00 000764e2 89be7e10 c03deacc 00001369
89be7f10 89be8120 89be8350 c03dea20 00001325
89be7f20 000764e5 89be8100 c03dea74 0000136b
89be7f30 00076494 89be7fe0 c03dea24 00001331
1: kd> dd 89be7f10
89be7f10 89be8120 89be8350 c03dea20 00001325
89be7f20 000764e5 89be8100 c03dea74 0000136b
1: kd> dd c03dea20
c03dea20 7b19b963 00000000 00000000 00000000
1: kd> dd c03de9f8
c03de9f8 7b21c963 00000000 7b2d0963 00000000