我写了一个 32 位 C++ Hello World 程序。然后我通过 SysInternal 的 Procmon 观看了它的执行。令我惊讶的是,我有 5 个“加载图像”类型的事件。加载了以下内容:
- ntdll.dll
- kernel32.dll
- 内核库.dll
- 应用程序帮助.dll
- msvcrt.dll
msvcrt.dll 和 kernel32.dll 是我的 Hello World 程序导入的 DLL。所以预计会加载。
根据我的研究,Windows 将 apphelp.dll 作为应用程序兼容性的一部分加载到我的进程中。
我想知道:
- 为什么 Windows 也会加载 ntdll.dll?
- 为什么 Windows 也会加载 KernelBase.dll?
- 将未经请求的 DLL 加载到称为 DLL Hooking 的进程中的过程吗?
PS:我使用的是最新的 Windows 10 版本。
根据您从其他库导入的功能,它们可能会依次导入其他库。
例如,实际上导入了许多函数,
Kernel32
KernelBase
KernelBase
然后从导入函数ntdll
开始执行程序所需的基本任务,没有什么可以停止的。