Freigeben über


Arm64X PE-Dateien

Arm64X ist eine neue Art von Binärdatei, die sowohl den klassischen Arm64-Code als auch den Arm64EC-Code zusammen enthalten kann. Diese duale Kompatibilität macht Arm64X für klassische Arm64- und Arm64EC-Prozesse auf einem Windows auf Arm-Gerät geeignet. Es ist besonders gut geeignet für Middleware oder Plug-Ins, die beide ABIs verwenden.

Die im Windows 11 SDK eingeführte Arm64X-Binärdatei ist eine Art portabler ausführbarer Datei (PORTABLE Executable, PE), die sowohl mit Windows 11 auf Arm als auch mit Windows 10 auf Arm funktioniert. Informationen zum Erstellen von Arm64X-Binärdateien finden Sie unter "Build Arm64X Binaries".

Wie funktionieren Arm64X-Binärdateien?

Grundsätzlich enthält eine Arm64X-Binärdatei alle Inhalte, die sich in separaten x64/Arm64EC- und Arm64-Binärdateien befinden würden, zusammenführen sie jedoch in eine effizientere Datei auf dem Datenträger. Die integrierte Arm64X-Binärdatei verfügt über zwei Codesätze, Einstiegspunkte und andere Elemente, ohne redundante Teile, um Speicherplatz auf dem Datenträger zu sparen.

Wenn eine Anwendung eine Arm64X-Binärdatei lädt, wendet das Betriebssystem Transformationen an, um die richtigen Abschnitte abhängig von der Architektur des Prozesses verfügbar zu machen. Sie können sich eine Arm64X-Binärdatei wie alte 3D-Bilder vorstellen, mit einem roten und blauen Bild, das durch die roten oder blauen Linsen auf einem Paar 3D-Brille angezeigt werden kann. Eine x64-App sieht die DLL so aus, als ob es sich um eine x64-DLL handelt, während eine Arm64-App dieselbe DLL wie eine Arm64-DLL sieht.

Arm64X-Transformationsgrafik mit 3D-Brille mit roten und blauen Linsen

Die transparenten Betriebssystemtransformationen ermöglichen sowohl x64- als auch Arm64-Anwendungen das Laden derselben Arm64X-Binärdatei, ohne jemals zu wissen, dass sie auch Code für die andere Architektur enthält. Aus diesem Grund nennen die Leute Arm64X Binärdateien "Chamäleon", während sie die "Farbe" ihrer Umgebung übernehmen.

Standardmäßig werden Arm64X-Binärdateien als Arm64-Binärdateien angezeigt. Diese Standardeinstellung ermöglicht einem System unter Windows 10 auf Arm, das das Arm64X-Format nicht erkennt oder weiß, wie Transformationen angewendet werden, um die Arm64X-Binärdatei erfolgreich in einen Arm64-Prozess zu laden.

Wie verwendet das Betriebssystem Arm64X-Binärdateien?

Windows 11 on Arm hat die Möglichkeit zum Ausführen von x64-Anwendungen auf Arm64 eingeführt. Im Gegensatz zur x86-Emulation, die einen SysWoW64 Ordner enthält, gibt es jedoch keinen separaten Ordner mit reinen x64-Betriebssystem-Binärdateien. Mit Windows 11 auf Arm können sowohl x64-Anwendungen als auch Arm64-Anwendungen Binärdateien laden und APIs mittels der Binärpakete in System32 aufrufen. Diese Flexibilität ist möglich, da Entwickler alle Binärdateien in System32 erneut als Arm64X-Binärdateien übersetzen, die eine App möglicherweise laden muss.

Sowohl x64- als auch Arm64-Anwendungen können die Binärdateien System32laden und mit diesen interagieren, ohne eine separate Kopie aller Systembinärdateien wie SysWoW64 für x86 zu benötigen.

x64- und Arm64-kompatible Binärdateien in System32-Ordnern

Arm64X zur Verwendung mit Middleware oder Plug-Ins

Die Kernfunktion einer Arm64X-Binärdatei besteht darin, eine Datei auf dem Datenträger zu ermöglichen, um sowohl x64/Arm64EC- als auch Arm64-Prozesse zu unterstützen. Die meisten App-Entwickler konzentrieren sich auf die Erstellung ihrer Anwendung als Arm64EC oder Arm64, nicht beide, daher benötigen Sie wahrscheinlich nicht Arm64X.

Entwickler von Middleware oder Plug-Ins sollten jedoch Arm64X in Betracht ziehen, da dieser Code in x64- oder Arm64-Prozesse geladen werden kann.

Sie können sowohl x64- als auch Arm64-Prozesse unterstützen, ohne Arm64X zu verwenden, aber Sie finden es möglicherweise einfacher, das Betriebssystem das Laden der richtigen Architektur der Binärdatei in einen bestimmten 64-Bit-Prozess überlassen zu lassen.

Drei Ansätze zur Unterstützung von Apps mit separaten Binärdateien: eine Arm64x-Binärdatei, ein Arm64X reiner Forwarder, der x64/Arm64EC mit Arm64-Binärdateien kombiniert

Folgende konzeptuelle Methoden zur Unterstützung beider Architekturen unter Windows 11 auf Arm gehören dazu:

  • Separate Binärdateien: Da Standardpraktiken heute separate Binärdateien verwenden, wenn mehrere Architekturen unterstützt werden, stellen Sie möglicherweise fest, dass das Erstellen und Versenden separater x64- und Arm64-Binärdateien für Ihre Lösung besser funktioniert. Sie können Ihre vorhandenen Mechanismen verwenden, um sicherzustellen, dass die richtigen Binaries in den entsprechenden Architekturprozess geladen werden.

  • Arm64X-Binärdatei: Sie können eine Arm64X-Binärdatei erstellen, die alle x64/Arm64EC- und Arm64-Code in einer Binärdatei enthält.

  • Arm64X pure Forwarder: Wenn Sie die Flexibilität von Arm64X benötigen, aber vermeiden möchten, dass Sie den gesamten App-Code in eine Arm64X-Binärdatei einfügen, können Sie den reinen Forwarder-Ansatz verwenden. Eine kleine Arm64X-Binärdatei ohne Code leitet das Ladeprogramm an die richtige Architektur der DLL um.

Beispielsituationen, die Arm64X erfordern

In einigen Situationen ist die Verwendung einer Arm64X-Binärdatei erforderlich, um sowohl x64- als auch Arm64-Apps zu unterstützen. Zu diesen Situationen gehören:

  • Ein 64-Bit-COM-Server, der sowohl x64- als auch Arm64-Apps aufruft
  • Ein Plug-In, das in eine x64- oder Arm64-App geladen wird
  • Eine einzelne Binärdatei, die in einen x64- oder Arm64-Prozess eingefügt wird

In jedem dieser Fälle können Sie eine Arm64X-Binärdatei oder eine reine Arm64X-Weiterleitung verwenden, um eine Binärdatei zur Unterstützung beider Architekturen zu ermöglichen.

Ausführliche Informationen zum Erstellen von Arm64X-Binärdateien finden Sie unter Build Arm64X-Binärdateien.