gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:02:33 25 4
gpt4 key购买 nike

经过长时间的调试,我发现我的应用程序可能向地址 0x5b81730 写入了错误的值。我想找出我的代码的哪一部分执行此操作。

前段时间,当我使用 Windows XP 时,这会很容易。我会在调试器 (MS Visual Studio 2005) 中重新启动我的应用程序,在该地址设置数据断点,然后调试器会指向我的违规代码。

现在,在我切换到 Windows 7 之后,这似乎是不可能的(或者至少非常困难)。当我运行我的应用程序时,我发现每次堆中同一对象的地址都略有不同(例如,一次运行为 0x53b71b4,而另一次运行为 0x55471b4)。

我听说 Windows 7 有 ASLR ,这可能是我看到这些地址变化的原因。

那么我该怎么做才能继续使用我的调试技术呢?

我应该关闭 ASLR 吗? (我相信这是可能的,但找不到怎么做)

或者我的问题是由其他原因而不是 ASLR 引起的?

还是我应该忘记使用数据断点的便利性,而使用其他一些技术?

最佳答案

如果您使用的是像 UB 这样的东西,则绝对不能保证地址是什么。您不能指望它每次都一样。

但是,您可以尝试在链接器设置中禁用 ASLR - 其中一个属性是“随机基地址”。

命令行语法是/DYNAMICBASE:NO。它在 Visual Studio 2005 中不存在,但在 VS 2012 及更高版本中存在。

关于c++ - 如何强制操作系统(Windows)为每个调试 session 为我的程序分配相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137306/

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