首页 文章

从堆栈中获取POP值时确定适当的寄存器?

提问于
浏览
-1

我正在学习更多关于汇编语言的知识,我看到如下指令:

PUSH EAX;
POP ESP;

...显然将EAX推入堆栈,并将其弹回ESP寄存器 .

是否在堆栈上以某种方式标记了源寄存器的值?例如,有没有办法知道最终堆栈的EAX值来自EAX?

如果EAX的值与ESP寄存器不兼容,并且它被弹出到ESP中,会发生什么?

1 回答

  • 0

    你必须对'the stack'有一个奇怪的想法 . esp - 堆栈指针 - 指向常规计算机内存中的某个位置 . push 操作将 esp 的值减小4并将其参数值存储在该地址 . A pop 反过来 . 由于堆栈指针指向常规内存,因此除了对内存中任何值的通常解释之外,它没有解释值.1403308_ .

    在您的示例中,EAX的'value'可能是'incompatible'?由于ESP是任何其他的注册,它可以保持任何 Value . 唯一的事情是,从它读取(直接,或使用 pop )或写入(直接,或使用 push )可能不安全 - 但在此,它只是将任何其他寄存器值视为指针并尝试从中读取或写入 .

相关问题