模块5 – Windows体系结构

介绍

本模块解释Windows体系结构以及Windows进程和应用程序的底层内容。

Windows体系结构

运行Windows操作系统的机器内部的处理器可以在两种不同的模式下运行:用户模式和内核模式。应用程序在用户模式下运行,操作系统组件在内核模式下运行。当应用程序想要完成任务(例如创建文件)时,它不能单独完成。唯一能够完成任务的实体是内核,因此应用程序必须遵循特定的函数调用流。下图显示了此流程的高级别。

20240702173554988-arch-diagram-1

  1. 用户进程 – 由用户执行的程序/应用程序,如记事本、Google Chrome或Microsoft Word。
  2. 子系统DLL – 包含由用户进程调用的API函数的DLL。例如kernel32.dll导出CreateFile Windows API(WinAPI)函数,其他常见的子系统dll为ntdll.dlladvapi32.dlluser32.dll
  3. Ntdll.dll – 一个系统范围的dll,它是用户模式下可用的最低层。这是一个特殊的DLL,用于创建从用户模式到内核模式的转换。这通常被称为本机API或NTAPI。
  4. 执行内核-这就是所谓的Windows内核,它调用内核模式中可用的其他驱动程序和模块来完成任务。Windows内核部分存储在名为n#krnl.exe的文件中,位于“C:\Windows\System32”下。

函数调用流

下图显示了一个创建文件的应用程序示例。它从用户应用程序调用kernel32.dll中提供的CreateFile WinAPI函数开始。Kernel32.dll是向WinAPI公开应用程序的关键dll,因此可以看到大多数应用程序都加载了它。接下来,CreateFile调用其等效的NTAPI函数NtCreateFile,该函数是通过ntdll.dll提供的。Ntdll.dll然后执行程序集sysenter(x86)或syscall(x64)指令,该指令将执行转移到内核模式。然后使用内核NtCreateFile函数,该函数调用内核驱动程序和模块来执行请求的任务。

20240702174227170-windows-arch-flow

函数调用流程示例

此示例显示通过调试器进行的函数调用流。这是通过将调试器附加到二进制文件来完成的,该二进制文件通过CreateFileW Windows API创建文件。

用户应用程序调用CreateFileW WinAPI。

20240702174353309-createfilew-dbg

接下来,CreateFileW调用其等效的NTAPI函数NtCreateFile

20240702174435429-ntcreatefile-dbg

最后,NtlogFile函数使用一条syscall汇编指令从用户模式转换到内核模式。然后内核将是创建该文件的那个内核。

20240702174605171-syscall

直接调用本机API(NTAPI)

需要注意的是,应用程序可以直接调用系统调用(即NTDLL函数),而无需通过Windows API。Windows API只是作为本机API的包装器。话虽如此,但原生API更难使用,因为它没有微软的官方文档。此外,微软建议不要使用原生API函数,因为它们可以在没有警告的情况下随时更改。

未来的模块将探讨直接调用Native API的好处。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容