调试时为什么寄存器值不会改变?

时间:2013-09-15 09:39:55

标签: debugging assembly compiler-construction

我是集会的新手,有一个问题让我很困扰。在调试时,可以看到寄存器的值。你可以暂停执行,观察等等。我的问题是这是怎么回事。寄存器是通用的,因此每个运行的程序都可以访问和更改它们。 对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。 那么这是如何工作的呢?我们将非常感谢更有见地的答案和解释。

2 个答案:

答案 0 :(得分:3)

答案非常简单。调试器(和/或OS相关的调试API)将寄存器的值保存在存储器中,然后获取控件并显示调试器屏幕。

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

如果要逐个执行指令,则会在执行的每条指令上发生这种情况。

答案 1 :(得分:1)

johnfound说的话。

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

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