64位的Windows是否使用KERNEL64?

27

我用dumpbin查看了一些库,发现所有的64位版本都链接到KERNEL32。在64位Windows中没有KERNEL64吗?如果没有,为什么呢?

我的所有操作系统都是32位的,所以我不能直接查看。通过谷歌搜索找不到有价值的信息,所以我怀疑64位Windows中没有KERNEL64,但是我还是很想知道为什么会这样。

编辑:后来我找到了这个非常有用的链接。MSDN x64指南


这可能有些牵强,但它可能与Windows API仍然相同有关。内核仍然明确是64位的。 - Cecil Has a Name
2个回答

31

即使在64位的Windows上,kernel32.dll仍然被称为这个名字。这是因为为了保持兼容性,system32包含64位二进制文件,而syswow64包含32位二进制文件。


8
兼容性方面的原因是什么? - Martin Ba
2
@Martin 这里有一个很好的答案:https://dev59.com/83NA5IYBdhLWcg3wdtr5 - Ben Straub
很确定这是为了让像这样的代码在16位、32位和64位模式下正常工作而不需要更改代码:((BOOL (WINAPI *)(DWORD, DWORD))GetProcAddress(GetModuleHandle("kernel32"), "Beep"))(1000, 300);。我相信如果微软能够回到过去,他们只会将其命名为Kernel.dll,这表明了发布后更改接口的代价。 - Dmytro

5
在64位版本的Windows中,其中一个"kernel32.dll"包含64位代码,但仍被称为kernel32.dll。这至少是误导性的。
希望以下链接能提供解决方案。

http://www.howzatt.demon.co.uk/articles/DebuggingInWin64.html

http://www.viva64.com/en/l/0002/

http://blogs.msdn.com/b/aaron_margosis/archive/2012/12/10/using-ntfs-junctions-to-fix-application-compatibility-issues-on-64-bit-editions-of-windows.aspx

64位Windows提供了这样一个环境,“开箱即用”,并使用“Windows on Windows 64”(WOW64)子系统支持32位应用程序,该子系统缩写为WOW64,运行在用户模式下,并将32位调用映射到操作系统内核的等效64位调用。这通常对于调用程序几乎是不可见的。Windows在%windir%\system32中提供了一组64位DLL,在%windir%\syswow64中提供了一组等效的32位DLL。实际上,此目录中的大部分二进制映像与32位Windows安装中system32目录中相同的文件相同。(对我来说,64位DLL存在system32中,而32位DLL存在syswow64中,这似乎是一个不幸的命名问题,但它就在那里)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接