当程序集有像 jmp f 这样的指令时,堆栈和帧指针会发生什么?
我的意思是 - f 是内存中的标签,对吗?我们如何跳转到内存中的不同地址而不更新我们的帧和堆栈指针...
编辑:我说的是 Intel x86 组件,是的:)
最佳答案
堆栈和帧指针处理数据的位置。 jmp
指令处理代码的位置。除非发生重大事件,否则一者不应影响另一者。以下是一些严重的事情的列表:
- 任务切换 - 由于使用任务门进行远跳转
- 故障 - 由于跳转到无效的新页面,或跳出当前段,或尝试非法更改权限的
jmp
。 - 陷阱 - 例如,由于代码断点。事实上,目前我并没有想到其他陷阱。
就是这样。即使这些情况也会改变堆栈,因为它们涉及某种上下文切换,要么切换到新任务,要么切换到某些异常处理程序。
另请注意,据我所知,没有操作系统使用 CPU 的任务切换功能。它通常用软件实现。
关于assembly - JMP 对堆栈和帧指针执行什么操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2465866/