我更多地了解汇编语言,我看到如下指示:
PUSH EAX;
POP ESP;
......显然将EAX推入堆栈,然后将其弹回ESP寄存器。
值是否在堆栈上以某种方式标记了源寄存器?例如,是否有某种方法可以知道最终在堆栈上的EAX值来自EAX?
如果EAX的值与ESP寄存器不兼容,并且它被弹出到ESP中,会发生什么?
答案 0 :(得分:0)
你必须对堆栈有一个奇怪的想法'实际上是。 esp
- 堆栈指针 - 指向常规计算机内存中的某个位置。 push
操作将esp
的值减少4并将其参数值存储在该地址。 pop
反之亦然。由于堆栈指针指向常规内存,因此值为' on'除了对记忆中任何值的通常解释之外,它没有没有解释。
在您的示例中,'值' EAX可能不兼容'?由于ESP是任何其他的注册,它可以保持任何价值。唯一的问题是,从它(直接,或使用pop
)或写入(直接,或使用push
)读取它可能不安全 - 但在此,它什么都不是否则将任何其他寄存器值视为指针并尝试从中读取或写入。