【问题标题】:Visual Studio disassembly: losing breakpointsVisual Studio 反汇编:丢失断点
【发布时间】:2013-05-05 10:33:31
【问题描述】:

我正在使用 Visual Studio 2010,使用和 .exe(没有原始代码,所以我只能看到汇编程序)。 生成它的代码与此类似(不完全是,它有未知的细微变化):

int main() {
    int points = 1000;
    int games = 0;

    srand ((unsigned int) time(NULL));  // random seed

    while(true) {
        games++;
        playGame(&points, games);
    keepPlaying();
    }
    return 0;
}

加上两个被调用的方法(真的很简单)。

现在,当我尝试调试 .exe 时,我打开它,按 F11,一切顺利。 我开始阅读代码,放置一些断点,定位 main,...

但是当我停止它并尝试按 F5 转到第一个断点时,我发现我的程序被加载到内存中的不同位置。因此,我找不到任何断点(指向未使用的内存)。

其他时候,我会逐行使用 F10/F11 直到找到断点。有时我找到了它们(并且它们已启用),但我再次尝试执行直到我到达它们 (F5) 并通过它们。

任何人都知道我是否可以,例如,强制 Visual Studio 将汇编程序始终放在同一个内存位置?或者任何让我保留断点的东西,这样我就不需要每次都逐行执行。

【问题讨论】:

  • ASLR 可以解释它,但这需要重新启动。这很可能完全是故意的。代码中内置的一项功能,可明确阻止您正在做的事情。没有游戏发行商许可他们的游戏让你破解它们。使用 punkbuster 风格的黑客来强制执行。
  • 首先,我想澄清一下,我只是想解决我第一年软件工程的一个练习,而不是试图获取信息来破解游戏。我什至可以上传练习的陈述和我收到的材料......(你需要能够阅读西班牙语)。
  • 好像这个答案被编辑了,或者我找不到前一个(我试图理解,但它似乎很有用)。无论如何,我似乎无法关闭ASLR。也许我以错误的方式打开解决方案,因为当我创建一个测试项目时,很容易找到。在这一个中,属性页面只显示“通用属性”和“配置属性”,没有关于链接器的内容。无论如何,谢谢你,总是很高兴知道这种事情。我会尝试找出解决我问题的方法。

标签: c++ visual-studio breakpoints disassembly


【解决方案1】:

好吧,我想出了一个环形交叉路口...如果其他人也有同样的问题,您可以通过创建和标记断点来部分避免它。其中一个在第一行。

例如,您可以在 main 方法的调用处或在它的开头放置另一个。 然后,不要停止并重新启动调试,只需转到第一个断点并 右击指令 > 稳定下一条指令。

但是,这可能会导致数据出现问题(而且肯定会出现问题),所以要小心。 它对我有用,但可能只是因为我将它用于一个非常简单的任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多