我知道在 Mac OS X 上,您可以使用 lipo 将针对不同架构的多个二进制文件组合成一个二进制文件。我想知道Windows端是否有类似的解决方案。谢谢。
不幸的是,所有 Windows 体系结构在 PE 标头中都使用相同的结构,所以不是。不过,可以融合 Windows 可执行文件和 DOS 可执行文件,因为 DOS 使用 MZ 标头。
ARM 上的 Windows 11 中有一种真正的胖 PE 格式,称为 Arm64X,其中包含 Arm64 代码和 Arm64EC 代码,甚至还包含 快进序列 中的 x86-64 存根,用于直接从 x86-64 代码调用
从根本上来说,Arm64X 二进制文件包含单独的 x64/Arm64EC 和 Arm64 二进制文件中的所有内容,但合并为磁盘上一个更高效的文件。构建的 Arm64X 二进制文件有两组代码、入口点等,同时消除了冗余部分以节省磁盘空间。
Arm64X 二进制文件如何工作?
Arm64EC 是一个完全新的 ABI,与 ARM64 不兼容,专为混合 x86-64 和 ARM64 代码而设计
我认为您指的是ADS,它已添加到 NTFS 中以提供与 Mac 上类似的功能。虽然NTFS支持多个流,但是PE加载器应该选择正确的一个,我不确定它是否实现了。