MSVC2015 中的固定基地址

Fixed base address in MSVC2015

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

不过,这样好像并没有达到预期的效果,每次地址还是不一样。此外,甚至 mainargv 的地址在每个会话中都是不同的。是否需要设置一些额外的参数,或者我是否误解了这些标志的用途?

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

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