【问题标题】:Why are register values not changing while debugging?为什么调试时寄存器值没有变化?
【发布时间】:2013-09-15 09:39:55
【问题描述】:

我是组装新手,有一个问题让我很困扰。调试时,可以看到寄存器的值。您可以暂停执行、观察等。我的问题是这怎么可能。寄存器是通用的,因此每个正在运行的程序都可以访问和更改它们。 对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。 那么这是如何工作的。更深入的答案和解释将不胜感激。

【问题讨论】:

    标签: debugging assembly compiler-construction


    【解决方案1】:

    答案很简单。调试器(和/或依赖于操作系统的调试 API)将寄存器的值保存在内存中,然后控制并显示调试器屏幕。

    稍后,当您想继续执行被调试程序时,调试器会恢复值并继续执行。

    这发生在每条执行的指令上,如果你想一个一个地执行指令。

    【讨论】:

      【解决方案2】:

      johnfound 所说的。

      程序集能够将寄存器值移动到内存(对于 x86/x64 架构无论如何)到堆栈上。在 intel x86 中,您可以通过一条指令将所有通用寄存器移动到堆栈中。

      当您开始在汇编中编写函数时,您将开始自己保存在函数中使用的寄存器的状态,并在函数结束时恢复它们。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2020-08-25
        • 2014-10-31
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2019-12-02
        • 2011-02-22
        相关资源
        最近更新 更多