Arm64X PE ファイル
Arm64X は、従来の Arm64 コードと Arm64EC コードの両方を一緒に含めることができる新しい種類のバイナリです。 これにより、Arm64x は、Arm デバイス上の Windows 上の従来の Arm64 プロセスと Arm64EC プロセスの両方に対応し、両方の AVI で使用できるミドルウェアまたはプラグインに特に適しています。
Windows 11 SDK で導入された Arm64X バイナリは、Arm 上のWindows 11と Arm 上のWindows 10の両方で動作するポータブル実行可能ファイル (PE) の一種です。 Arm64X バイナリをビルドするには、「 Arm64X バイナリのビルド」を参照してください。
Arm64X バイナリのしくみ
基本的に、Arm64X バイナリには、個別の x64/Arm64EC バイナリと Arm64 バイナリに含まれるすべてのコンテンツが含まれますが、ディスク上の 1 つのより効率的なファイルにマージされます。 ビルドされた Arm64X バイナリには、ディスク上の領域を節約するための冗長な部分を排除しながら、2 つのコード セット、エントリ ポイントなどがあります。
Arm64X バイナリがアプリケーションによって読み込まれると、オペレーティング システムは変換を適用して、読み込まれるプロセスのアーキテクチャに応じて正しいセクションを公開します。 古い 3D 画像のような Arm64X バイナリを考えることができます。赤と青の両方の画像は、3D グラスのペアで赤または青のレンズを通して見ることができます。 x64 アプリでは DLL が x64 DLL であるかのように表示され、Arm64 アプリには Arm64 DLL と同じ DLL が表示されます。
透過的なオペレーティング システム変換により、x64 アプリケーションと Arm64 アプリケーションの両方が、他のアーキテクチャに対応するコードも含まれていることを知らずに、同じ Arm64X バイナリを読み込むことができます。 そのため、Arm64X バイナリは周囲の "色" を受け取る際に "カメレオン" と呼ばれます。
既定では、Arm64X バイナリは Arm64 バイナリのように見えます。 これにより、Arm64X 形式や変換の適用方法がわからない Arm でWindows 10を実行しているシステムは、Arm64X バイナリを Arm64 プロセスに正常に読み込むことができます。
オペレーティング システムで Arm64X バイナリを使用する方法
Windows 11 on Arm では、Arm64 で x64 アプリケーションを実行する機能が導入されました。 ただし、フォルダーを含む SysWoW64
x86 エミュレーションとは異なり、純粋な x64 オペレーティング システム バイナリの別のフォルダーはありません。 Arm でWindows 11すると、x64 アプリケーションと Arm64 アプリケーションの両方で、 のバイナリを使用してSystem32
バイナリを読み込み、API を呼び出すことができるようになります。 この柔軟性は、アプリが System32
読み込む必要があるバイナリが Arm64X バイナリとして再コンパイルされているために可能です。
x64 アプリケーションと Arm64 アプリケーションの両方で、 の System32
バイナリを読み込んで操作できます。x86 のような SysWoW64
すべてのシステム バイナリを個別にコピーする必要はありません。
ミドルウェアまたはプラグインで使用する Arm64X
Arm64X バイナリのコア機能は、ディスク上の 1 つのファイルが x64/Arm64EC プロセスと Arm64 プロセスの両方をサポートできるようにすることです。 ほとんどのアプリ開発者は、両方ではなく Arm64EC または Arm64 としてアプリケーションを構築することに重点を置きます。この場合、Arm64X は必要ない可能性があります。
ただし、このようなコードは x64 または Arm64 プロセスに読み込まれる可能性があるため、Arm64X は ミドルウェア または プラグインの開発者が考慮する必要があります。
Arm64X を使用せずに x64 プロセスと Arm64 プロセスの両方をサポートできますが、オペレーティング システムで特定の 64 ビット プロセスへのバイナリの正しいアーキテクチャの読み込みを処理する方が簡単な場合があります。
arm のWindows 11で両方のアーキテクチャをサポートする 3 つの概念的な方法は次のとおりです。
個別のバイナリ: 現在の標準プラクティスでは、複数のアーキテクチャをサポートするときに個別のバイナリが使用されるため、個別の x64 バイナリと Arm64 バイナリをビルドして出荷する方がソリューションに適している場合があります。 既存のメカニズムを使用して、関連付けられているアーキテクチャ プロセスに正しいバイナリが確実に読み込まれるようにすることができます。
Arm64X バイナリ: すべての x64/Arm64EC コードと Arm64 コードを 1 つのバイナリで含む Arm64X バイナリをビルドできます。
Arm64X 純粋フォワーダー: Arm64X の柔軟性が必要だが、すべてのアプリ コードを Arm64X バイナリに入れないようにしたい場合は、コードのない小さな Arm64X バイナリを使用してローダーを DLL の正しいアーキテクチャにリダイレクトする純粋フォワーダー アプローチを使用できます。
Arm64X を必要とする状況の例
x64 アプリと Arm64 アプリの両方をサポートするために、Arm64X バイナリの使用が必要になる状況がいくつかあります。 これには次のものが含まれます。
- x64 または Arm64 アプリの両方によって呼び出される可能性がある 64 ビット COM サーバー
- x64 または Arm64 アプリに読み込まれるプラグイン
- x64 または Arm64 プロセスに挿入される 1 つのバイナリ
いずれの場合も、Arm64X バイナリまたは Arm64X 純粋フォワーダーを使用して、1 つのバイナリで両方のアーキテクチャをサポートできます。
Arm64X バイナリのビルドの詳細については、「 Arm64X バイナリのビルド」を参照してください。
Windows on Arm
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示