一个简单的SYSENTER / SYSCALL问题

时间:2009-10-29 13:17:56

标签: operating-system system-calls

如果Windows可执行文件使用SYSENTER并在实现AMD64 ISA的处理器上执行,会发生什么?我是这个主题的新手和新手(操作系统,硬件/软件交互),但从我读过的内容我已经了解到SYSCALL是AMD64相当于英特尔的SYSENTER。希望这个问题有道理。

3 个答案:

答案 0 :(得分:3)

如果您尝试在不支持的情况下使用SYSENTER,您可能会收到“无效的操作码”异常。 请注意,这种情况很常见 - 通常,Windows可执行文件不直接包含进入内核模式的指令。

答案 1 :(得分:0)

据我所知,AM64处理器使用不同类型的模式来处理这类问题。

SYSENTER工作正常,但速度不快。

一个非常有用的网站,可以开始使用不同的模式: Wikipedia

答案 2 :(得分:0)

当他们开发AMD64扩展时,他们摆脱了许多未使用的功能。其中一个主要是消除cs,ds,es和ss段寄存器。通常,加载段寄存器是一项非常昂贵的操作(CPU必须进行权限检查,这可能涉及多个内存访问)。进入内核模式需要加载新的段寄存器值。

SYSENTER指令通过使用一组“影子寄存器”来加速这一过程,该影子寄存器可以直接复制到(内部,隐藏)段描述符而无需进行任何权限检查。只有几个段寄存器,绝大多数好处都会丢失,因此很可能推断删除对指令的支持是因为使用模式切换的常规指令更快。