WinDBG 是否提供了一种显示dt
普通堆地址的类型信息 (?) 的方法?
我正在研究分页堆和用户模式堆栈跟踪不可用的场景。在分析堆时,我正在追踪堆的过度使用情况,并在堆中发现了引用某个内存地址的各种对象。主要
!heap -srch [UserPtr] +0x30
返回的对象是这样的:
0:004> !heap -srch 00000224ceade3a0+30
_HEAP @ 224ceaa0000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
00000224ceae3ac0 045c 0000 [00] 00000224ceae3ad0 045ac - (busy)
_HEAP @ 224ceaa0000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
00000224ceae8080 0346 045c [00] 00000224ceae8090 03454 - (busy)
现在由于缺少用户模式堆栈跟踪!heap -p -a [UserPtr]
返回任何内容。
0x00000224ceae3ad0
所以我在这里,我知道这实际上0x00000224ceae8090
是罪魁祸首。实际上[UserPtr]+0x30
(48 字节),原因我还没有找到,但我被困在这里。(我创建了一个小样本,我可以在其中验证地址,所以至少在样本中我很确定地址是正确的)
在这一点上,我可以做些什么有用的事情来获得有关这些地址的更多信息,而这些信息!address [Addr]
并没有太大帮助。
因为我知道大小和地址,所以我可以在堆中四处走动,看看我能找到什么,但这似乎是随机的。
关于如何获取更多数据的任何提示都会很棒。
对于它的价值:我与 LFH 在 NT 堆上。
编辑: 在我的示例中,我当然知道数据类型,但在现实世界的场景中,我所面临的这些类型对我来说是未知的,即使可以访问代码,除了巧合匹配之外,哪些对象的哪个实例指向该地址可能并不明显的大小。