JMP对堆栈和帧指针做了什么?
当程序集有像jmp这样的指令时,堆栈和帧指针会发生什么变化?
我的意思是 - f是记忆中的标签吗? 我们如何跳转到内存中的不同地址,而不是更新我们的帧和堆栈指针......
编辑:我正在谈论英特尔x86程序集是的:)
堆栈和帧指针处理数据的 位置 。 jmp
指令处理代码的 位置 。 除非发生严重事故,否则不应该影响其他事件。 以下是一些激烈的事情:
jmp
尝试非法更改权限。 就是这样。 即使是这些情况也会改变堆栈,因为它们涉及某种上下文切换,无论是新任务还是某个异常处理程序。
还请注意,我所知道的任何操作系统都使用CPU的任务切换功能。 它通常用软件实现。
我猜你在谈论英特尔的指令? 在这种情况下,任何堆栈/帧指针都不会发生任何变化,代码只是在相同的上下文中继续执行,但在新地址处继续执行。
我想这个答案有一些注意事项 - 可以使用jmp指令导致任务切换,在这种情况下可能会发生各种疯狂的事情。 您可能需要阅读所有文档的详细信息。 英特尔软件开发人员手册包含所有细节:
jmp
文档 编辑:指的是你的问题跳跃没有更新。
您必须能够在不修改堆栈和帧指针的情况下跳转代码。 例如,它与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?