繁体   English   中英

在长64位模式下,远JMP和远CALL之间的区别

[英]Difference between far JMP and far CALL in a long 64-bit mode

我试图了解x86-64 CPU的远JMP和远CALL指令之间的区别。 如果我正确遵循Intel文档的64位长模式:

A) 远呼 (操作码48, FF, /3 )或在asm中:

call tbyte ptr [rcx]

可以用于对相同或不同代码段的“代码段”或“呼叫门”调用,具体取决于所使用的段选择器的GDT或LDT。 哪里:

  • “代码段”只能指定相同的特权(CPL)级别的调用。 它可以是对32位兼容模式代码的调用,也可以是相同的64位长模式的调用(取决于L位)。

  • “呼叫门”可以指定相同的特权级别(CPL)呼叫或特权间呼叫。 但是它不能跳到32位兼容模式,而只能跳到相同的64位长模式。

B)远端JMP (操作码48, FF, /5 )或asm中的代码:

jmp tbyte ptr [rcx] 

我找不到太多有关64位长模式的文档。 它与远传通话的规格几乎相同吗?

我似乎找不到针对特权间“呼叫门” JMP进入不同CPL的任何参考,也无法从长64位模式跳至32位兼容模式。

有人可以澄清这一点吗?

特权级之间的远距离呼叫可以通过呼叫门以64位进行。 目标调用门指定的代码段描述符必须不符合规范,并且其DPL必须小于CPL。 然后,将新的CPL设置为DPL。 另一方面,特权级之间的控制转移不可能实现。 也就是说,如果调用门指定的代码段描述符不符合且DPL <CPL,则会发生一般保护(GP)异常。

您不能将JMP从64位段扩展到非64位段。 否则,将发生GP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM