Share via


Arm64X-PE-Dateien

Arm64X ist ein neuer Binärtyp, der sowohl den klassischen Arm64-Code als auch Arm64EC-Code zusammen enthalten kann. Dadurch ist Arm64x sowohl für die klassischen Arm64- als auch für Arm64-Prozesse auf einem Windows-on-Arm-Gerät kompatibel und eignet sich besonders gut für Middleware oder Plug-Ins, die von beiden ABIs verwendet werden können.

Die Arm64X-Binärdatei wurde im Windows 11 SDK eingeführt und ist ein Typ von PE-Datei (Portable Executable), 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 Erstellen von Arm64X-Binärdateien.

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 erstellte Arm64X-Binärdatei verfügt über zwei Codesätze, Einstiegspunkte usw., während redundante Teile eliminiert werden, 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 verfügbar zu machen, abhängig von der Architektur des Prozesses, in den sie 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 einer 3D-Brille angezeigt werden kann. Eine x64-App sieht die DLL so, als wäre sie eine x64-DLL, während eine Arm64-App dieselbe DLL wie eine Arm64-DLL sieht.

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

Die transparenten Betriebssystemtransformationen ermöglichen es sowohl x64- als auch Arm64-Anwendungen, dieselbe Arm64X-Binärdatei zu laden, 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, da sie die "Farbe" ihrer Umgebung übernehmen.

Standardmäßig scheinen Arm64X-Binärdateien Arm64-Binärdateien zu sein. Dadurch kann ein System, das Windows 10 auf Arm ausgeführt wird, das weder das Arm64X-Format noch die Anwendung von Transformationen kennt, die Arm64X-Binärdatei erfolgreich in einen Arm64-Prozess laden.

Wie verwendet das Betriebssystem Arm64X-Binärdateien?

Windows 11 auf Arm wurde die Möglichkeit eingeführt, x64-Anwendungen auf Arm64 auszuführen. 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 in System32aufrufen. Diese Flexibilität ist möglich, da alle Binärdateien, in System32 denen eine App möglicherweise geladen werden muss, als Arm64X-Binärdateien neu kompiliert wurden.

Sowohl x64- als auch Arm64-Anwendungen können die Binärdateien in System32laden und mit ihnen 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 aktivieren, 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 als beide, in diesem Fall wird Arm64X wahrscheinlich nicht erforderlich sein.

Arm64X sollte jedoch von Entwicklern von Middleware oder Plug-Ins in Betracht gezogen 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, aber möglicherweise ist es einfacher, dem Betriebssystem zu ermöglichen, die richtige Architektur der Binärdatei in einen bestimmten 64-Bit-Prozess zu laden.

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

Es gibt drei konzeptionelle Möglichkeiten, beide Architekturen auf Windows 11 auf Arm zu unterstützen:

  • Separate Binärdateien: Da Standardmethoden 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 zugeordneten Architekturprozess geladen wird.

  • Arm64X-Binärdatei: Sie können eine Arm64X-Binärdatei erstellen, die den gesamten 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, ihren gesamten App-Code in eine Arm64X-Binärdatei einzufügen, können Sie den reinen Forwarder-Ansatz verwenden, bei dem eine kleine Arm64X-Binärdatei ohne Code verwendet wird, um den Ladevorgang zur richtigen Architektur der DLL umzuleiten.

Beispielsituationen, für die 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 aktivieren.

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