c++ - MSVC2015 中的固定基地址

标签 c++ visual-c++ aslr

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

然而,这似乎并没有达到预期的效果,每次的地址仍然不同。此外,甚至 mainargv 的地址在每个 session 中都是不同的。是否需要设置一些额外的参数,或者我是否以某种方式误解了这些标志的用途?

最佳答案

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

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

关于c++ - MSVC2015 中的固定基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40211135/

相关文章:

c++ - 在同一个字符串中多次使用 string::find

c++ - 编写 Bash 脚本来计算平均值

c++ - 绑定(bind)类方法并将其作为函数指针传递

visual-studio - 如何从命令行编译 MSVC 项目中的单个源文件?

c++ - 静态 __forceinline 或 __forceinline 静态

android - Android 上 ASLR 的目的是什么?

windows - 微软的ASLR很奇怪

c++ - 如何在Qt Project中打包大数据?

c++ - VS 2008 C++ 构建输出?

c++ - 如何强制操作系统(Windows)为每个调试 session 为我的程序分配相同的地址?