Fichiers PE Arm64X

Arm64X est un nouveau type de binaire qui peut contenir à la fois le code Arm64 classique et le code Arm64EC ensemble. Cela rend Arm64x compatible pour les processus Arm64 et Arm64EC classiques sur un appareil Windows sur Arm et un particulièrement adapté aux middlewares ou plug-ins qui peuvent être utilisés par les deux API.

Introduit dans le Kit de développement logiciel (SDK) Windows 11, le fichier binaire Arm64X est un type de fichier exécutable portable (PE) qui fonctionne avec Windows 11 sur Arm et Windows 10 sur Arm. Pour générer des fichiers binaires Arm64X, consultez Build Arm64X Binaires.

Comment fonctionnent les fichiers binaires Arm64X ?

Fondamentalement, un binaire Arm64X contient tout le contenu qui se trouverait dans des fichiers binaires x64/Arm64EC et Arm64 distincts, mais fusionnés dans un fichier plus efficace sur le disque. Le binaire Arm64X construit a deux ensembles de code, de points d’entrée, etc., tout en éliminant les parties redondantes pour économiser de l’espace sur le disque.

Lorsqu’un binaire Arm64X est chargé par une application, le système d’exploitation applique des transformations pour exposer les sections appropriées en fonction de l’architecture du processus dans lequel il est chargé. Vous pouvez penser à un binaire Arm64X comme les anciennes images 3D, avec une image rouge et bleue qui peut être vue par le biais des lentilles rouges ou bleues sur une paire de lunettes 3D. Une application x64 voit la DLL comme s’il s’agit d’une DLL x64, tandis qu’une application Arm64 voit la même DLL qu’une DLL Arm64.

Graphique de transformation Arm64X montrant des lunettes 3D avec des lentilles rouges et bleues

Les transformations transparentes du système d’exploitation permettent aux applications x64 et Arm64 de charger le même binaire Arm64X sans jamais savoir qu’il contient également du code correspondant à l’autre architecture. Pour cette raison, les binaires Arm64X sont surnommés « caméléon » car ils prennent la couleur de leur environnement.

Par défaut, les fichiers binaires Arm64X semblent être des fichiers binaires Arm64. Cela permet à un système exécutant Windows 10 sur Arm, qui ne connaît pas le format Arm64X ou comment appliquer des transformations, de charger le binaire Arm64X dans un processus Arm64 avec succès.

Comment le système d’exploitation utilise-t-il des fichiers binaires Arm64X ?

Windows 11 sur Arm a introduit la possibilité d’exécuter des applications x64 sur Arm64. Toutefois, contrairement à l’émulation x86, qui inclut un SysWoW64 dossier, il n’existe aucun dossier distinct de fichiers binaires de système d’exploitation x64 purs. Avec Windows 11 sur Arm, les applications x64 et les applications Arm64 peuvent charger des fichiers binaires et appeler des API à l’aide des fichiers binaires dans System32. Cette flexibilité est possible, car tous les fichiers binaires dans System32 utilisant une application peuvent avoir besoin d’être chargés ont été recompilés en tant que fichiers binaires Arm64X.

Les applications x64 et Arm64 peuvent charger et interagir avec les fichiers binaires dans System32, sans avoir besoin d’une copie distincte de tous les fichiers binaires système comme SysWoW64 pour x86.

Fichiers binaires compatibles x64 et Arm64 dans les dossiers System32

Arm64X à utiliser avec l’intergiciel ou les plug-ins

La fonction principale d’un binaire Arm64X consiste à permettre à un fichier sur disque de prendre en charge les processus x64/Arm64EC et Arm64. La plupart des développeurs d’applications se concentrent sur la création de leur application comme Arm64EC ou Arm64, et non les deux, auquel cas Arm64X ne sera probablement pas nécessaire.

Arm64X doit toutefois être pris en compte par les développeurs d’intergiciels ou de plug-ins, car ce code peut être chargé dans des processus x64 ou Arm64.

Vous pouvez prendre en charge les processus x64 et Arm64 sans utiliser Arm64X, mais vous pouvez constater qu’il est plus facile de permettre au système d’exploitation de gérer le chargement de l’architecture correcte du binaire dans un processus 64 bits donné.

Trois approches de prise en charge des fichiers binaires distincts, du binaire Arm64x, du redirecteur pur Arm64X combinant x64/Arm64EC avec des binaires Arm64

Trois façons conceptuelles de prendre en charge les deux architectures sur Windows 11 sur Arm sont les suivantes :

  • Binaires distincts : étant donné que les pratiques standard utilisent aujourd’hui des fichiers binaires distincts lors de la prise en charge de plusieurs architectures, vous pouvez constater que la création et l’expédition de fichiers binaires x64 et Arm64 distincts fonctionnent mieux pour votre solution. Vous pouvez utiliser vos mécanismes existants pour vous assurer que le fichier binaire approprié est chargé dans le processus d’architecture associé.

  • Binaire Arm64X : vous pouvez générer un binaire Arm64X qui contient l’ensemble du code x64/Arm64EC et Arm64 dans un seul binaire.

  • Redirecteur pur Arm64X : si vous avez besoin de flexibilité d’Arm64X, mais que vous souhaitez éviter de placer tout le code de votre application dans un binaire Arm64X, vous pouvez choisir d’utiliser l’approche du redirecteur pur, où un petit binaire Arm64X sans code n’est utilisé pour rediriger le chargeur vers l’architecture correcte de la DLL.

Exemples de situations nécessitant Arm64X

Il existe certaines situations qui nécessitent l’utilisation d’un binaire Arm64X pour prendre en charge les applications x64 et Arm64. Celles-ci sont les suivantes :

  • Un serveur COM 64 bits qui peut être appelé par les applications x64 ou Arm64
  • Plug-in qui peut être chargé dans une application x64 ou Arm64
  • Un seul binaire qui est injecté dans un processus x64 ou Arm64

Dans chacun de ces cas, vous pouvez utiliser un binaire Arm64X ou un redirecteur pur Arm64X pour permettre à un binaire de prendre en charge les deux architectures.

Pour plus d’informations sur la création de fichiers binaires Arm64X, consultez Build Arm64X binaires.