【发布时间】:2014-02-03 01:09:35
【问题描述】:
我一直在调试软件中的堆损坏。我可以将数据写入堆并控制一些指针。我可以在不知道这一点的情况下实现执行代码的目标,但这让我有点困惑。
问题是我找不到要写入的块在哪个堆中,也找不到堆段。
我在 Windbg 下使用:!heap -x [address] and !heap -x -v [address],他们没有给我任何结果。
我知道当第一个堆中没有可用空间时,某些堆可能会保留另一个堆段。但是,我已经转储了所有堆段,但找不到与我正在寻找的基地址相似的任何人。
在我看来有点奇怪,没有进程或应用程序特定的堆有这些块!
【问题讨论】:
-
是什么让您确定地址在堆上而不是在堆栈上(或者,在多线程程序的情况下,是堆栈之一)?
-
我刚刚检查了该页面的访问权限,它没有“受保护”,应该保护堆栈。此外,主线程(我感兴趣的)正在堆块中编辑内存。
-
很公平,只是检查... :)
-
相关,可能有帮助:stackoverflow.com/a/353606/241536
-
堆栈页面不受保护。堆栈的最后有一个保护页,但所有其他堆栈页都是完全可写的。
标签: c++ windows memory heap-memory windbg