gpt4 book ai didi

windows - 给定一个指针,我如何找到它所属的 _HEAP_ENTRY?

转载 作者:可可西里 更新时间:2023-11-01 09:22:26 25 4
gpt4 key购买 nike

我正在学习使用 WinDbg,我可能会偏离正轨,但我假设如果我的程序没有使用分页堆,而不是“拥有”的 _DPH_HEAP_BLOCK 结构一个指向我的分配的指针,我会为分配的数据设置一个 _HEAP_ENTRY

给定堆上已分配数据的地址,我如何找到与之对应的 _HEAP_ENTRY(在 WinDbg 中),或者我的问题甚至没有意义?

我的问题的根源是我想知道转储中的分配是否已释放或堆是否以某种方式损坏。

最佳答案

!heap -p -a <address>

启用页堆后,这会转储出有用的信息(可能包括最后一个分配/释放此堆 block 的人的调用堆栈)- 我认为这可视化了 _DPH_HEAP_BLOCK。

没有启用页面堆,它只显示基本信息——这不是很有用。我认为这是常规的 _HEAP_ENTRY 结构。在第二次访问时调试双重释放/等几乎是不可能的(至少对于像我这样的凡人而言)。

当遇到堆问题时,我立即通过 AppVerifier 启用堆验证,然后再次 repo 。这做了两件事:

  1. 它将 AV 从“进一步”访问释放的内存转移到更早的时间点,有时使错误的根本原因显而易见

  2. 它使 !heap -p -a <address>命令转储出更多有用的信息,包括最后释放它的调用堆栈 (!!)

!heap+app 验证器非常棒,在每个人都应该知道的 ninja-windbg-foo 列表中可能仅次于内存写入断点。

关于windows - 给定一个指针,我如何找到它所属的 _HEAP_ENTRY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2090356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com