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. Dies macht Arm64x kompatibel für die klassischen Arm64- und Arm64EC-Prozesse auf einem Windows auf Arm-Gerät und eine besonders gute Passform für Middleware oder Plug-Ins, die von beiden ABIs verwendet werden können.

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, aber in einer effizienteren Datei auf dem Datenträger zusammengeführt werden. Die integrierte Arm64X-Binärdatei verfügt über zwei Codesätze, Einstiegspunkte usw., ohne redundante Teile, um Speicherplatz auf dem Datenträger zu sparen.

Wenn eine Arm64X-Binärdatei von einer Anwendung geladen wird, wendet das Betriebssystem Transformationen an, um die richtigen Abschnitte abhängig von der Architektur des Prozesses verfügbar zu machen, in den es geladen wird. 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 wäre sie eine x64-DLL, 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 enthält, der der anderen Architektur entspricht. Aus diesem Grund werden Arm64X-Binärdateien als "Chamäleon" bezeichnet, während sie die "Farbe" ihrer Umgebung übernehmen.

Standardmäßig werden Arm64X-Binärdateien als Arm64-Binärdateien angezeigt. Dadurch kann ein System unter Windows 10 auf Arm ausgeführt werden, das das Arm64X-Format nicht kennt oder 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 mithilfe der Binärdateien aufrufen System32. Diese Flexibilität ist möglich, da alle Binärdateien, in System32 denen eine App geladen werden muss, möglicherweise als Arm64X-Binärdateien neu kompiliert wurden.

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

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 darauf, ihre Anwendung entweder als Arm64EC oder Arm64 zu erstellen, nicht beide, in diesem Fall ist Arm64X wahrscheinlich nicht erforderlich.

Arm64X sollte von Entwicklern von Middleware oder Plug-Ins berücksichtigt werden, da dieser Code das Potenzial hat, in x64- oder Arm64-Prozesse geladen zu werden.

Sie können sowohl x64- als auch Arm64-Prozesse unterstützen, ohne Arm64X zu verwenden. Möglicherweise ist es jedoch einfacher, das Laden der richtigen Architektur der Binärdatei in einen bestimmten 64-Bit-Prozess zu ermöglichen.

Drei Ansätze für die Unterstützung von Apps separate Binärdateien, Arm64x-Binärdatei, Arm64X pure Forwarder kombiniert x64/Arm64EC mit Arm64 Binärdateien

Zu den folgenden konzeptuellen Methoden zur Unterstützung beider Architekturen unter Windows 11 auf Arm gehören:

  • Separate Binärdateien: Da Standardpraktiken heute separate Binärdateien verwenden, wenn mehrere Architekturen unterstützt werden, können Sie feststellen, 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 richtige Binärdatei in den zugehörigen Architekturprozess geladen wird.

  • 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 reine Weiterleitung: Wenn Sie Flexibilität von Arm64X benötigen, aber vermeiden möchten, dass Sie ihren gesamten App-Code in eine Arm64X-Binärdatei einfügen, können Sie den reinen Forwarder-Ansatz verwenden, bei dem eine kleine Arm64X-Binärdatei ohne Code verwendet wird, um das Ladeprogramm an die richtige Architektur der DLL umzuleiten.

Beispielsituationen, in denen Arm64X erforderlich wäre

Es gibt einige Situationen, in denen die Verwendung einer Arm64X-Binärdatei erforderlich ist, um sowohl x64- als auch Arm64-Apps zu unterstützen. Dazu gehören:

  • Ein 64-Bit-COM-Server, der von x64- oder Arm64-Apps aufgerufen werden kann
  • Ein Plug-In, das entweder in eine x64- oder Arm64-App geladen werden kann
  • 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.