nt!ExRemoveHeadNBQueue函数和_NBQUEUE_HEADER结构的关系

第一部分:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值