File ARM64X PE
Arm64X è un nuovo tipo di binario che può contenere sia il classico codice Arm64 che il codice Arm64EC . Questo rende Arm64x compatibile sia con i processi Arm64 classici che con quelli Arm64EC su un dispositivo Windows on Arm e si adatta particolarmente bene al middleware o ai plugin che possono essere utilizzati da entrambi gli ABI.
Introdotto nell'SDK di Windows 11, il binario Arm64X è un tipo di file Portable Executable (PE) che funziona sia con Windows 11 su Arm che con Windows 10 su Arm. Per costruire i binari Arm64X, consulta Build Arm64X Binaries.
Come funzionano i binari Arm64X?
Fondamentalmente, un binario Arm64X contiene tutto il contenuto dei binari separati x64/Arm64EC e Arm64, ma unito in un unico file più efficiente su disco. Il binario Arm64X costruito ha due serie di codice, punti di ingresso e così via, eliminando le parti ridondanti per risparmiare spazio su disco.
Quando un binario Arm64X viene caricato da un'applicazione, il sistema operativo applica delle trasformazioni per esporre le sezioni corrette a seconda dell'architettura del processo in cui viene caricato. Puoi pensare a un binario Arm64X come alle vecchie immagini 3D, con un'immagine sia rossa che blu che può essere vista attraverso le lenti rosse o blu di un paio di occhiali 3D. Un'applicazione x64 vedrà la DLL come se fosse una DLL x64, mentre un'applicazione Arm64 vedrà la stessa DLL come una DLL Arm64.
Le trasformazioni trasparenti del sistema operativo consentono alle applicazioni x64 e Arm64 di caricare lo stesso binario Arm64X senza sapere che contiene anche codice corrispondente all'altra architettura. Per questo motivo, i binari Arm64X sono soprannominati "camaleonte" perché assumono il "colore" dell'ambiente circostante.
Per impostazione predefinita, i binari Arm64X appaiono come binari Arm64. Questo permette a un sistema che esegue Windows 10 su Arm, che non conosce il formato Arm64X o non sa come applicare le trasformazioni, di caricare il binario Arm64X in un processo Arm64 con successo.
In che modo il sistema operativo utilizza i binari Arm64X?
Windows 11 on Arm ha introdotto la possibilità di eseguire applicazioni x64 su Arm64. Tuttavia, a differenza dell'emulazione x86 di , che include una cartella SysWoW64
, non esiste una cartella separata di binari del sistema operativo x64 puro. Con Windows 11 su Arm, sia le applicazioni x64 che quelle Arm64 sono in grado di caricare i binari e chiamare le API utilizzando i binari in System32
. Questa flessibilità è possibile perché tutti i binari di System32
che un'applicazione potrebbe dover caricare sono stati ricompilati come binari Arm64X.
Sia le applicazioni x64 che quelle Arm64 possono caricare e interagire con i binari presenti in System32
, senza bisogno di una copia separata di tutti i binari di sistema come SysWoW64
per x86.
Arm64X per l'utilizzo di middleware o plugin
La funzione principale di un binario Arm64X è quella di consentire a un file su disco di supportare sia i processi x64/Arm64EC che Arm64. La maggior parte degli sviluppatori di applicazioni si concentrerà sulla realizzazione della propria applicazione in Arm64EC o Arm64, non in entrambi, nel qual caso Arm64X probabilmente non sarà necessario.
Arm64X dovrebbe essere preso in considerazione dagli sviluppatori del middleware o dei plugin , tuttavia, perché tale codice può essere caricato in processi x64 o Arm64.
Puoi supportare sia i processi x64 che Arm64 senza utilizzare Arm64X, ma potresti scoprire che è più semplice permettere al sistema operativo di gestire il caricamento dell'architettura binaria corretta in un determinato processo a 64 bit.
Tre modi concettuali per supportare entrambe le architetture in Windows 11 on Arm includono:
Binari separati: Poiché le pratiche standard oggi utilizzano binari separati quando si supportano più architetture, potresti scoprire che la creazione e la spedizione di binari x64 e Arm64 separati funziona meglio per la tua soluzione. Puoi utilizzare i meccanismi esistenti per assicurarti che il binario corretto venga caricato nel processo di architettura associato.
Arm64X binary: Puoi creare un binario Arm64X che contiene tutto il codice x64/Arm64EC e Arm64 in un unico binario.
Arm64X pure forwarder: Se hai bisogno della flessibilità di Arm64X ma vuoi evitare di inserire tutto il codice della tua applicazione in un binario Arm64X, puoi scegliere di utilizzare l'approccio del forwarder puro, in cui un piccolo binario Arm64X senza codice viene utilizzato per reindirizzare il caricatore all'architettura corretta della DLL.
Esempi di situazioni che richiedono Arm64X
Ci sono alcune situazioni che richiedono l'uso di un binario Arm64X per supportare sia le applicazioni x64 che quelle Arm64. Questi includono:
- Un server COM a 64 bit che può essere richiamato sia da applicazioni x64 che Arm64
- Un plugin che può essere caricato sia in un'applicazione x64 che in una Arm64
- Un singolo binario che viene iniettato in un processo x64 o Arm64
In ognuno di questi casi, puoi utilizzare un binario Arm64X o un forwarder puro Arm64X per consentire a un binario di supportare entrambe le architetture.
Per i dettagli sulla creazione di binari Arm64X, consulta Build Arm64X binaries.