【发布时间】:2013-09-15 09:39:55
【问题描述】:
我是组装新手,有一个问题让我很困扰。调试时,可以看到寄存器的值。您可以暂停执行、观察等。我的问题是这怎么可能。寄存器是通用的,因此每个正在运行的程序都可以访问和更改它们。 对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。 那么这是如何工作的。更深入的答案和解释将不胜感激。
【问题讨论】:
标签: debugging assembly compiler-construction
我是组装新手,有一个问题让我很困扰。调试时,可以看到寄存器的值。您可以暂停执行、观察等。我的问题是这怎么可能。寄存器是通用的,因此每个正在运行的程序都可以访问和更改它们。 对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。 那么这是如何工作的。更深入的答案和解释将不胜感激。
【问题讨论】:
标签: debugging assembly compiler-construction
答案很简单。调试器(和/或依赖于操作系统的调试 API)将寄存器的值保存在内存中,然后控制并显示调试器屏幕。
稍后,当您想继续执行被调试程序时,调试器会恢复值并继续执行。
这发生在每条执行的指令上,如果你想一个一个地执行指令。
【讨论】:
johnfound 所说的。
程序集能够将寄存器值移动到内存(对于 x86/x64 架构无论如何)到堆栈上。在 intel x86 中,您可以通过一条指令将所有通用寄存器移动到堆栈中。
当您开始在汇编中编写函数时,您将开始自己保存在函数中使用的寄存器的状态,并在函数结束时恢复它们。
【讨论】: