Partager via


Fichiers ARM64X PE

Arm64X est un nouveau type de binaire qui peut contenir à la fois le code Arm64 classique et le code Arm64EC ensemble. Cette double compatibilité rend Arm64X adapté à la fois aux processus classiques Arm64 et Arm64EC sur un appareil Windows sur Arm. Il est particulièrement adapté aux intergiciels ou aux plug-ins que les deux API utilisent.

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 les fusionne dans un fichier plus efficace sur le disque. Le binaire Arm64X construit a deux ensembles de code, de points d’entrée et d’autres éléments, tout en éliminant les parties redondantes pour économiser de l’espace sur le disque.

Lorsqu’une application charge un binaire Arm64X, le système d’exploitation applique des transformations pour exposer les sections appropriées en fonction de l’architecture du processus. 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 pour l’autre architecture. Pour cette raison, les gens surnomment les binaires Arm64X « caméléon » car ils adoptent la « couleur » de leur environnement.

Par défaut, les fichiers binaires Arm64X semblent être des fichiers binaires Arm64. Ce paramètre par défaut permet à un système exécutant Windows 10 sur Arm, qui ne reconnaît pas le format Arm64X ou de savoir comment appliquer des transformations, pour 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 les développeurs recompilent tous les fichiers binaires de System32 qu'une application pourrait avoir besoin de charger en 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 en tant qu’Arm64EC ou Arm64, et non les deux, de sorte que vous n’avez probablement pas besoin d’Arm64X.

Toutefois, les développeurs d’intergiciels ou de plug-ins doivent prendre en compte Arm64X, 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 trouver plus facile de laisser le système d’exploitation gérer le chargement de l’architecture correcte du binaire dans un processus 64 bits donné.

Trois approches pour la prise en charge des applications : séparer les fichiers binaires, le binaire Arm64X, et l'utilisation d'un redirecteur pur Arm64X combinant les binaires x64/Arm64EC avec 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 binaire correct se charge 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 la flexibilité d’Arm64X, mais que vous souhaitez éviter de placer tout le code de votre application dans un binaire Arm64X, vous pouvez utiliser l’approche de transfert pure. Un petit binaire Arm64X sans code redirige le chargeur vers l’architecture correcte de la DLL.

Exemples de situations nécessitant Arm64X

Certaines situations nécessitent l’utilisation d’un binaire Arm64X pour prendre en charge les applications x64 et Arm64. Ces situations sont les suivantes :

  • Un serveur COM 64 bits que les applications x64 et Arm64 appellent
  • Plug-in qui se charge 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.