Arm64X 是一种新型的二进制文件,可以同时包含经典 Arm64 代码和 Arm64EC 代码 。 这使得 Arm64x 与 Arm 设备上的 Windows 上的经典 Arm64 和 Arm64EC 进程兼容,非常适合两个 API 可能使用的中间件或插件。

在 Windows 11 SDK 中引入,Arm64X 二进制文件是一种可移植可执行 (PE) 文件,适用于 Arm 上的Windows 11和 Arm 上的Windows 10。 若要生成 Arm64X 二进制文件,请参阅 生成 Arm64X 二进制文件

Arm64X 二进制文件的工作原理是什么?

从根本上说,Arm64X 二进制文件包含将位于单独的 x64/Arm64EC 和 Arm64 二进制文件中的所有内容,但合并到磁盘上的一个更高效的文件中。 内置的 Arm64X 二进制文件有两组代码、入口点等,同时消除冗余部件以节省磁盘上的空间。

当应用程序加载 Arm64X 二进制文件时,操作系统会应用转换来公开正确的部分,具体取决于要加载到的进程体系结构。 你可以想象一个 Arm64X 二进制像旧的 3D 图像,其中包含一个红色和蓝色图像,可以通过一对三维眼镜上的红色或蓝色镜头查看。 x64 应用将看到 DLL,就像它是 x64 DLL 一样,而 Arm64 应用将看到与 Arm64 DLL 相同的 DLL。

透明操作系统转换允许 x64 和 Arm64 应用程序加载相同的 Arm64X 二进制文件,而无需知道它还包含对应于其他体系结构的代码。 因此,Arm64X 二进制文件被绰号为“变色龙”,因为他们承担周围的“颜色”。

默认情况下,Arm64X 二进制文件显示为 Arm64 二进制文件。 这允许在 Arm 上运行Windows 10的系统(不知道 Arm64X 格式或如何应用转换)成功将 Arm64X 二进制文件加载到 Arm64 进程中。

操作系统如何使用 Arm64X 二进制文件?

arm 上的Windows 11引入了在 Arm64 上运行 x64 应用程序的功能。 但是,与 包含文件夹的 x86 仿真 SysWoW64 不同,没有纯 x64 操作系统二进制文件的单独文件夹。 在 Arm 上Windows 11后,x64 应用程序和 Arm64 应用程序都可以使用二进制文件 System32 加载二进制文件并调用 API。 这种灵活性是可能的,因为该应用中的任何二进制文件 System32 可能需要加载已重新编译为 Arm64X 二进制文件。

x64 和 Arm64 应用程序都可以加载 System32 和与二进制文件进行交互,而无需单独复制所有系统二进制文件,例如 SysWoW64 x86。

用于中间件或插件的 Arm64X

Arm64X 二进制文件的核心功能是让磁盘上的一个文件同时支持 x64/Arm64EC 和 Arm64 进程。 大多数应用开发人员将专注于将其应用程序构建为 Arm64EC 或 Arm64,而不是这两者,在这种情况下,可能不需要 Arm64X。

但是, 中间件 插件的 开发人员应考虑 Arm64X,因为此类代码有可能加载到 x64 或 Arm64 进程中。

可以在不使用 Arm64X 的情况下同时支持 x64 和 Arm64 进程,但你可能会发现,允许操作系统更轻松地将二进制文件的正确体系结构加载到给定的 64 位进程中。

支持 Arm 上Windows 11这两种体系结构的三种概念方法包括:

  • 单独的二进制文件 :由于标准做法目前在支持多个体系结构时使用单独的二进制文件,你可能会发现生成和传送单独的 x64 和 Arm64 二进制文件更适用于解决方案。 可以使用现有机制来确保将正确的二进制文件加载到关联的体系结构进程中。

  • Arm64X 二进制 文件:可以在一个二进制文件中生成包含所有 x64/Arm64EC 和 Arm64 代码的 Arm64X 二进制文件。

  • Arm64X 纯转发器 :如果需要 Arm64X 的灵活性,但想要避免将所有应用代码放入 Arm64X 二进制文件中,可以选择使用纯转发器方法,其中没有代码的小型 Arm64X 二进制文件用于将加载程序重定向到 DLL 的正确体系结构。

    需要 Arm64X 的示例情况

    在某些情况下,需要使用 Arm64X 二进制文件来支持 x64 和 Arm64 应用。 其中包括:

  • x64 或 Arm64 应用可能调用的 64 位 COM 服务器
  • 可能加载到 x64 或 Arm64 应用的插件
  • 一个注入 x64 或 Arm64 进程的二进制文件
  • 在这些情况下,可以使用 Arm64X 二进制或 Arm64X 纯转发器,使一个二进制文件支持这两种体系结构。

    有关生成 Arm64X 二进制文件的详细信息,请参阅 生成 Arm64X 二进制文件