代码之家  ›  专栏  ›  技术社区  ›  Jens Björnhager

在系统调用期间,Windows如何切换到管理模式?

  •  3
  • Jens Björnhager  · 技术社区  · 15 年前

    在系统调用期间,Windows如何切换到管理模式?我听说过“trap 0”,但它甚至不像x86指令。我经历了一些系统调用,但找不到任何系统调用。许多Windows系统调用是否以用户模式运行?哪个在管理模式下运行?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mads Elvheim    15 年前

    系统调用 也被称为 软件中断 . 调用软件中断的x86指令具有助记键 国际的 . 数据如何传递到操作系统由操作系统ABI定义。据我所知,Windows将immediate 0x80用于其所有例程,并通过寄存器发送附加数据,但我不确定。0x20是第一个可用的立即数,因为范围0到31是保留的,并且用于一般的异常,如整数除以零和内存错误。

    什么 基本上 发生的情况是CPU切换到特权模式并读取 IDTR (中断描述符表寄存器)。在这里,它找到IDT(Interupt描述符表)的物理内存地址,并根据烘焙到软件中断指令中的8位立即数查找IDT。IDT可以存储在内存中的任何位置。IDTR可以通过说明LIDT和SIDT读/写。IDT可以存储各种信息,但是对于中断,它将地址存储到与int immediate关联的服务例程中。

    触发软件中断的win32函数示例。嗯。 普林特 朋友当然有,朋友也有。 输入关键部分 .在WindowsVista和Windows7中,由于使用了新的复合管理器,一些OpenGL和DirectxAPI调用现在需要往返内核。对于OpenGL,它适用于读取当前backbuffer的所有函数,如glreadpixels、glcopy(sub)teximage2d等。

    附言:用一小撮盐来做这个职位。我已经有段时间没有用这种方式处理窗口了,我也没有做很多事实检查。欢迎编辑和评论。

    这里有一个链接 Intel 386 manual (我还是引用了这句话)

        2
  •  4
  •   Nathan Fellman    15 年前

    x86 CPU提供 SYSENTER SYSEXIT 说明。这些指令执行从用户模式到内核模式的快速切换,并且在现代CPU上运行的现代操作系统很可能使用这些操作系统,而不是非常昂贵的中断或远程调用。

    您可以在中查看更多详细信息 Intel's Software Developer's Manuals ,具体地说 volume 2B