我去,卦中出现了不愿看到的 Unable to read nt!_HEAP_VIRTUAL_ALLOC_ENTRY structure at 0000000043500000,也就是说显示不出 _HEAP_VIRTUAL_ALLOC_ENTRY 结构,可以用 dt 验证一下 。
0:000> dt nt!_HEAP_VIRTUAL_ALLOC_ENTRYSymbol nt!_HEAP_VIRTUAL_ALLOC_ENTRY not found.为什么在他的机器上没记录到,可能和它生产服务器的 Windows 系统有关 , 这里就不细究原因,接下来的问题是: !heap 命令失效,该怎么把 VirtualAllocdBlocks 给挖出来呢?只能纯人肉了...
3. 如何人肉挖 VirtualAllocdBlocks要想人肉挖,需要一些底层知识 , 比如下面三点 。
- VirtualAllocdBlocks 是什么?
0:000> dt nt!_HEAP 0000000029fb0000ntdll!_HEAP +0x118 VirtualAllocdBlocks : _LIST_ENTRY [ 0x00000000`43500000 - 0x00000000`32970000 ] +0x128 SegmentList : _LIST_ENTRY [ 0x00000000`29fb0018 - 0x00000000`5c380018 ] ...0:000> dt _LIST_ENTRY 0000000029fb0000+0x118ntdll!_LIST_ENTRY [ 0x00000000`43500000 - 0x00000000`32970000 ] +0x000 Flink : 0x00000000`43500000 _LIST_ENTRY [ 0x00000000`47240000 - 0x00000000`29fb0118 ] +0x008 Blink : 0x00000000`32970000 _LIST_ENTRY [ 0x00000000`29fb0118 - 0x00000000`4ee90000 ]从卦中可以看到 , VirtualAllocdBlocks 是一个拥有 Flink 和 Blink 的双向链表结构 。
- _HEAP_VIRTUAL_ALLOC_ENTRY 是什么?
0:016> dt nt!_HEAP_VIRTUAL_ALLOC_ENTRYntdll!_HEAP_VIRTUAL_ALLOC_ENTRY +0x000 Entry : _LIST_ENTRY +0x010 ExtraStuff : _HEAP_ENTRY_EXTRA +0x020 CommitSize : Uint8B +0x028 ReserveSize : Uint8B +0x030 BusyBlock : _HEAP_ENTRY从卦中可以看到,除了真正的分配 BusyBlock 之外还有一些附属信息 , 比如 CommitSize , ReserveSize 等等,接下来就可以抽取 第一个节点地址 加上 +0x30 来找到这个真正的内存分配块 , 即 0x0000000043500000 + 0x30,然后使用 !heap -p -a 就可以看到这个分配块的源头在哪里了 。
0:000> !heap -p -a 0x0000000043500000 + 0x30 address 0000000043500030 found in _HEAP @ 29fb0000 HEAP_ENTRY Size Prev Flags UserPtr UserSize - state 0000000043500030 100100 0000 [00] 0000000043500060 1000040 - (busy VirtualAlloc) 775bc35b ntdll! ?? ::FNODOBFM::`string'+0x00000000000153eb 7fed230483b halcon!HXmalloc+0x000000000000008b 7fed22dd81d halcon!HXAllocRLTmp+0x000000000000265d 7fed22d6bd0 halcon!HXAllocTmp+0x0000000000000a80 7fed44a346a halcon!HCancelWait+0x000000000000007a 7fed2386b8f halcon!CCallHProc+0x000000000000073f 7fe83e3bcf6 +0x000007fe83e3bcf60:000> !ip2md 0x000007fe83e3bcf6MethodDesc: 000007fe83c39138Method Name: HalconDotNet.xxxClass: 000007fe83c6b890MethodTable: 000007fe83c3f300mdToken: 0000000006000df5Module: 000007fe83a7f498IsJitted: yesCodeAddr: 000007fe83e3bb90Transparency: Safe critical
推荐阅读
- Bing 广告平台迁移到 .net6
- 微信怎么删除好友,微信好友怎么快速删除(微信怎么一次性删除所有的好友)
- control 掌控 方法记录
- n维偏序 方法记录
- SpringBoot实战派读书笔记---响应式编程
- .NET 6 跨服务器联表查询
- 小米平板5pro可以插卡吗_小米平板5pro可以打电话吗
- 不安装运行时运行 .NET 程序 - NativeAOT
- ARC148游记
- 桃源记铜币怎么获取