Arm64X PE 文件

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

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

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

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

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

显示带有红色和蓝色镜头的 3D 眼镜的 Arm64X 转换图形

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

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

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

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

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

System32 文件夹中的 x64 和 Arm64 兼容二进制文件

用于中间件或插件的 Arm64X

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

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

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

支持应用独立二进制文件的三种方法:Arm64x 二进制文件、将 x64/Arm64EC 与 Arm64 二进制文件相结合的 Arm64X 纯转发器

在 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 二进制文件