MSVC2015

时间:2016-10-24 05:15:55

标签: c++ visual-c++ aslr

我正在尝试调试应用程序中的内存泄漏。泄漏的对象有点难以识别(在销毁堆之前),并且创建了许多类似的对象。如果每个会话都有相同的地址,那么它将变得相当容易。因此,我试图在我的可执行文件的链接器属性中使用/FIXED/DYNAMICBASE:NO禁用ASLR。

但是,这似乎没有达到预期的效果,每次地址仍然不同。此外,即使argvmain的地址每个会话都不同。我需要设置一些额外的参数,还是我在某种程度上误解了这些标志的用途?

1 个答案:

答案 0 :(得分:4)

您正在查看数据地址; ASLR主要用于代码。它确定加载EXE和DLL代码段的位置。

您可以覆盖operator new来控制内存分配,并使用VirtualAlloc和定义的基址来使分配更具确定性(但仍然可能具有多线程竞争条件)。或者,使用MSVC默认堆调试工具通过其序列号而不是其地址来标识块。