JMP对堆栈和帧指针做了什么?

当程序集有像jmp这样的指令时,堆栈和帧指针会发生什么变化?

我的意思是 - f是记忆中的标签吗? 我们如何跳转到内存中的不同地址,而不是更新我们的帧和堆栈指针......

编辑:我正在谈论英特尔x86程序集是的:)


堆栈和帧指针处理数据的 位置jmp指令处理代码的 位置 。 除非发生严重事故,否则不应该影响其他事件。 以下是一些激烈的事情:

  • 任务切换 - 由于使用任务门的远程跳转
  • 错误 - 由于跳转到无效的新页面或跳出当前段,或者jmp尝试非法更改权限。
  • 陷阱 - 例如,由于代码断点。 事实上,目前还没有其他陷阱浮现在脑海。
  • 就是这样。 即使是这些情况也会改变堆栈,因为它们涉及某种上下文切换,无论是新任务还是某个异常处理程序。

    还请注意,我所知道的任何操作系统都使用CPU的任务切换功能。 它通常用软件实现。


    我猜你在谈论英特尔的指令? 在这种情况下,任何堆栈/帧指针都不会发生任何变化,代码只是在相同的上下文中继续执行,但在新地址处继续执行。

    我想这个答案有一些注意事项 - 可以使用jmp指令导致任务切换,在这种情况下可能会发生各种疯狂的事情。 您可能需要阅读所有文档的详细信息。 英特尔软件开发人员手册包含所有细节:

  • 卷2A中的jmp文档
  • 7.3卷3A中的任务切换
  • 编辑:指的是你的问题跳跃没有更新。

    您必须能够在不修改堆栈和帧指针的情况下跳转代码。 例如,它与C代码中的goto相同 - 您可以跳过所有的函数,而无需修改执行上下文。


    我们如何跳转到内存中的不同地址,而不是更新我们的帧和堆栈指针......

    因为指令指针(eip)存储在与帧和堆栈指针(esp,ebp)不同的寄存器中。 改变一个不会影响其他人(通常)。

    链接地址: http://www.djcxy.com/p/82373.html

    上一篇: what does JMP do to stack and frame pointers?

    下一篇: Where in memory are variables stored in c, Heap or Stack?