一个简单的SYSENTER / SYSCALL问题
-
10-07-2019 - |
题
如果Windows可执行文件使用SYSENTER并在实现AMD64 ISA的处理器上执行,会发生什么?我是这个主题的新手和新手(操作系统,硬件/软件交互),但从我读过的内容我已经了解到SYSCALL是AMD64相当于英特尔的SYSENTER。希望这个问题有道理。
解决方案
如果您尝试在不支持的情况下使用SYSENTER,您可能会得到<!>“无效的操作码<!>”;例外。 请注意,这种情况很常见 - 通常,Windows可执行文件不直接包含进入内核模式的指令。
其他提示
当他们开发AMD64扩展时,他们摆脱了许多未使用的功能。其中一个主要是消除cs,ds,es和ss段寄存器。通常,加载段寄存器是一项非常昂贵的操作(CPU必须进行权限检查,这可能涉及多个内存访问)。进入内核模式需要加载新的段寄存器值。
SYSENTER指令通过设置一组<!>“影子寄存器<!>来加速这种情况。这可以直接复制到(内部的,隐藏的)段描述符,而无需进行任何权限检查。只有几个段寄存器,绝大多数好处都会丢失,因此很可能推断删除对指令的支持是因为使用模式切换的常规指令更快。
不隶属于 StackOverflow