Bagikan melalui


File ARM64X PE

Arm64X adalah jenis biner baru yang dapat berisi kode Arm64 klasik dan kode Arm64EC bersama-sama. Ini membuat Arm64x kompatibel untuk proses Arm64 dan Arm64EC klasik pada perangkat Windows di Arm dan sangat cocok untuk middleware atau plugin yang dapat digunakan oleh kedua ABI.

Diperkenalkan di Windows 11 SDK, biner Arm64X adalah jenis file Portable Executable (PE) yang berfungsi dengan Windows 11 di Arm dan Windows 10 di Arm. Untuk membangun biner Arm64X, lihat Membangun Biner Arm64X.

Bagaimana cara kerja biner Arm64X?

Pada dasarnya, biner Arm64X berisi semua konten yang akan berada di biner x64/Arm64EC dan Arm64 terpisah, tetapi digabungkan menjadi satu file yang lebih efisien pada disk. Biner Arm64X bawaan memiliki dua set kode, titik masuk, dll., sambil menghilangkan bagian redundan untuk menghemat ruang pada disk.

Ketika biner Arm64X dimuat oleh aplikasi, sistem operasi menerapkan transformasi untuk mengekspos bagian yang benar tergantung pada arsitektur proses yang sedang dimuat. Anda dapat memikirkan biner Arm64X seperti gambar 3D lama, dengan gambar merah dan biru yang dapat dilihat melalui lensa merah atau biru pada sepasang kacamata 3D. Aplikasi x64 akan melihat DLL seolah-olah itu adalah DLL x64, sementara aplikasi Arm64 akan melihat DLL yang sama dengan DLL Arm64.

Grafik transformasi Arm64X memperlihatkan kacamata 3D dengan lensa merah dan biru

Transformasi sistem operasi transparan memungkinkan aplikasi x64 dan Arm64 memuat biner Arm64X yang sama tanpa pernah mengetahui bahwa aplikasi tersebut juga berisi kode yang sesuai dengan arsitektur lainnya. Untuk itu, biner Arm64X dijuluki 'bungleon' karena mereka mengambil 'warna' lingkungan mereka.

Secara default, biner Arm64X tampaknya biner Arm64. Ini memungkinkan sistem yang menjalankan Windows 10 di Arm, yang tidak tahu format Arm64X atau cara menerapkan transformasi, untuk memuat biner Arm64X ke dalam proses Arm64 dengan sukses.

Bagaimana sistem operasi menggunakan biner Arm64X?

Windows 11 di Arm memperkenalkan kemampuan untuk menjalankan aplikasi x64 di Arm64. Namun, tidak seperti emulasi x86, yang mencakup SysWoW64 folder, tidak ada folder terpisah dari biner sistem operasi x64 murni. Dengan Windows 11 di Arm, aplikasi x64 dan aplikasi Arm64 dapat memuat biner dan memanggil API menggunakan biner di System32. Fleksibilitas ini dimungkinkan karena biner apa pun dalam aplikasi yang mungkin perlu dimuat System32 telah dikompilasi ulang sebagai biner Arm64X.

Aplikasi x64 dan Arm64 dapat memuat dan berinteraksi dengan biner di System32, tanpa perlu salinan terpisah dari semua biner sistem seperti SysWoW64 untuk x86.

Biner yang kompatibel dengan x64 dan Arm64 dalam folder System32

Arm64X untuk digunakan dengan middleware atau plugin

Fungsi inti dari biner Arm64X adalah mengaktifkan satu file pada disk untuk mendukung proses x64/Arm64EC dan Arm64. Sebagian besar pengembang aplikasi akan difokuskan untuk membangun aplikasi mereka sebagai Arm64EC atau Arm64, bukan keduanya, dalam hal ini Arm64X kemungkinan tidak akan diperlukan.

Arm64X harus dipertimbangkan oleh pengembang middleware atau plugin, karena kode tersebut berpotensi dimuat ke dalam proses x64 atau Arm64.

Anda dapat mendukung proses x64 dan Arm64 tanpa menggunakan Arm64X, tetapi Anda mungkin menemukan bahwa lebih mudah untuk memungkinkan sistem operasi menangani pemuatan arsitektur biner yang benar ke dalam proses 64-bit tertentu.

Tiga pendekatan untuk mendukung biner terpisah aplikasi, biner Arm64x, penerus murni Arm64X yang menggabungkan x64/Arm64EC dengan biner Arm64

Tiga cara konseptual untuk mendukung kedua arsitektur pada Windows 11 di Arm meliputi:

  • Biner terpisah: Karena praktik standar saat ini menggunakan biner terpisah saat mendukung beberapa arsitektur, Anda mungkin menemukan bahwa membangun dan mengirim biner x64 dan Arm64 terpisah berfungsi lebih baik untuk solusi Anda. Anda dapat menggunakan mekanisme yang ada untuk memastikan bahwa biner yang benar dimuat ke dalam proses arsitektur terkait.

  • Biner Arm64X: Anda dapat membangun biner Arm64X yang berisi semua kode x64/Arm64EC dan Arm64 dalam satu biner.

  • Arm64X pure forwarder: Jika Anda membutuhkan fleksibilitas Arm64X tetapi ingin menghindari menempatkan semua kode aplikasi Anda ke dalam biner Arm64X, Anda dapat memilih untuk menggunakan pendekatan penerus murni, di mana biner Arm64X kecil tanpa kode digunakan untuk mengalihkan loader ke arsitektur DLL yang benar.

Contoh situasi yang memerlukan Arm64X

Ada beberapa situasi yang akan mengharuskan penggunaan biner Arm64X untuk mendukung aplikasi x64 dan Arm64. Hal-hal tersebut meliputi:

  • Server COM 64-bit yang mungkin dipanggil oleh aplikasi x64 atau Arm64
  • Plugin yang mungkin dimuat ke dalam aplikasi x64 atau Arm64
  • Biner tunggal yang disuntikkan ke dalam proses x64 atau Arm64

Dalam setiap kasus ini, Anda dapat menggunakan biner Arm64X atau penerus murni Arm64X untuk mengaktifkan satu biner untuk mendukung kedua arsitektur.

Untuk detail tentang membangun biner Arm64X, lihat Membangun biner Arm64X.