代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

Windows上的系统调用

  •  13
  • B.Gen.Jack.O.Neill  · 技术社区  · 15 年前

    我只想问,我知道Linux中的Standart系统调用是通过指向中断向量表的int指令完成的。我想这在窗户上是相似的。但是,如何调用一些更高级的特定系统例程呢?例如,如何告诉Windows创建窗口?我知道这是由DLL中的代码处理的,但是在汇编程序指令级别实际发生了什么?dll中的例程是通过int指令调用软件中断,还是有其他方法来处理?谢谢。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Kelly S. French    15 年前

    进行Win32调用以创建窗口实际上与中断无关。客户端应用程序已与提供调用的.dll链接,该调用公开链接器要使用的地址。由于您在询问调用机制的差异,我将这里的讨论限制为对任何应用程序可用的Win32调用,而不是内核级调用或设备驱动程序。在汇编语言级别,它将与任何其他函数调用相同,因为大多数win32调用都是用户级调用,在内部进行所需的内核调用。链接器提供win32函数的地址作为某种分支指令的目标,具体情况取决于编译器。

    [编辑] 看起来您对中断和int.vector表的看法是正确的。codeguru有一篇关于NT内核调用如何工作的详细操作系统文章。链接:
    http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035