首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >长64位模式下的远JMP和远调用的区别

长64位模式下的远JMP和远调用的区别
EN

Stack Overflow用户
提问于 2018-06-01 03:43:22
回答 1查看 1.3K关注 0票数 0

我正在尝试理解x86-64CPU的far JMP和far CALL指令的区别。如果我按照64位长模式的英特尔文档进行了正确操作:

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

代码语言:javascript
运行
复制
call tbyte ptr [rcx]

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

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

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

代码语言:javascript
运行
复制
jmp tbyte ptr [rcx] 

我找不到很多关于64位长模式的文档。它和远距离呼叫的规格是一样的吗?

我似乎找不到任何关于特权间“调用门”JMP到不同CPL的引用,或者能够从长64位模式跳转到32位兼容模式。

有人能澄清这一点吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 04:58:19

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50631680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档