我最近发现,即使加载了x86内核,Mac OS X实际上也可以运行64位(x64)应用程序。这让我第一次感到震惊。
但是后来我意识到,如果系统启动并在与x64兼容的CPU上运行,那无论使用什么内核来管理进程,都无法运行x64应用程序,那真的很奇怪。真的那么难吗?只需将该死的应用程序加载到内存中,然后将CPU操作指针设置为第一个字节即可,就像馅饼一样容易!
如我所能想象的那样,实现此目标的唯一且唯一的障碍是某种“可执行标头”。不幸的是,我对Windows体系结构和二进制结构不太满意,因此在此需要更多说明。
事实上类UNIX操作系统二进制头标准的ELF有它的兄弟ELF64,这(如文档这里描述)没有与ELF32多大差别,但即使32位内核是无法运行的x64代码。是的,该程序可能已链接到x64库,并且可以想象我们刚刚将它们复制并粘贴到/ usr / lib64文件夹中。但是我很确定这无济于事,为什么呢?
最后,Mac OS X内核有什么特别之处,而不必担心所使用的程序指令集?Mac OS X是否具有某种通用性并且适用于两个内核可执行文件头,因此它可以将应用程序加载到内存中并对CPU说“从此处立即执行,我不介意那代表什么”?
PS:我真的很想在哪里放置这个问题:在stackoverflow.com或superuser.com上,并决定放在此处,因为该主题可能是更特定于OS的东西。
uname -a
在x86内核下的输出可能是这样的:Darwin MacMini.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_i386 i386