我只是想问一下,我知道 Linux 中的标准系统调用是通过指向中断向量表的 int 指令完成的。我认为这在 Windows 上是类似的。但是,您如何调用某些更高级别的特定系统例程?比如你怎么告诉Windows创建一个窗口?我知道这是由 dll 中的代码处理的,但是在汇编指令级别实际发生了什么? dll中的例程是否通过int指令调用软件中断,或者有什么不同的方法来处理这个问题?谢谢。

最佳答案

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

[编辑]
看起来您对中断和 int 的看法是正确的。矢量表。 CodeGuru 有一篇很好的文章,其中详细介绍了 NT 内核调用的工作原理。关联:
http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035

关于windows - Windows 上的系统调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2759101/

10-14 12:18
查看更多