【发布时间】:2018-02-21 13:30:27
【问题描述】:
阅读英特尔的大手册,我看到如果你想从一个远调用返回,即对另一个代码段中的过程的调用,你只需发出一个返回指令(可能带有一个移动堆栈的立即参数指针弹出后指针向上 n 个字节)。
显然,如果我的解释正确,硬件足以将段选择器和偏移量弹出到正确的寄存器中。
但是,系统如何知道返回应该是远返回,以及偏移量和选择器都需要弹出?
如果硬件只是弹出偏移量指针而不是它之后的选择器,那么您将指向正确的偏移量但错误的段。
远返回命令与近返回版本相比没有什么特别之处。
据我所知,它们看起来都一样。
然后我假设处理器,可能在微架构级别,跟踪哪些调用是远的,哪些是近的,这样当它们返回时,系统知道要弹出多少字节以及从哪里弹出它们(指针寄存器和段选择器寄存器)。
我的假设正确吗?
你们对这个机制了解多少?
【问题讨论】:
标签: pointers x86 return memory-segmentation micro-architecture