【发布时间】:2017-03-30 16:51:55
【问题描述】:
- 将 kernel32.dll 从 System32(或 SysWOW64,如果您使用 32 位应用程序进行测试)复制到包含您的 EXE 文件的目录
- 运行EXE文件
- Process Monitor 显示它甚至不需要先检查本地文件夹中的 kernel32.dll
这似乎与我一直认为的 DLL 的默认行为相矛盾,即首先从本地应用程序目录加载,如果不存在则从 PATH 环境变量加载。但是,对于某些 DLL,如 ntdll 或 kernel32,Windows 似乎总是首先检查 System32。这是预期的行为吗?可以覆盖吗?
(我知道覆盖这将是不好的做法,但想知道它是否真的可能,对于科学来说!)
【问题讨论】:
-
32 位应用程序实际上将 system32 重定向到 32 位对应项,因此它甚至不会尝试加载 64 位 DLL 作为首选。
-
这些 DLL 几乎已经被缓存了,从另一个地方加载并不好。系统关键 DLL 将始终从默认路径注入。
-
我知道 Windows 会在必要时将 System32 重定向到 SysWOW64,这不是我要问的。我也知道重写这些 DLL 是不好的做法,但我仍然想知道是否有可能。经过进一步研究,我似乎应该在目录中添加一个 .local 文件,但这仍然没有效果。
-
那么我认为由于 Windows 的缓存行为,它们不能被覆盖(DLL 在实际 RAM 中只存在一次,而不是每个进程一次)
-
这是 Windows 中的
known dll支持。
标签: windows dll windows-10 kernel32