Archivos de PE de Arm64X
Arm64X es un nuevo tipo de binario que puede contener el código arm64 clásico y el código Arm64EC juntos. Esto hace que Arm64x sea compatible con los procesos clásicos de Arm64 y Arm64EC en un dispositivo Windows en Arm y un ajuste especialmente adecuado para middleware o complementos que ambos ABIs pueden usar.
Introducido en el SDK de Windows 11, el binario Arm64X es un tipo de archivo ejecutable portátil (PE) que funciona con Windows 11 en Arm y Windows 10 en Arm. Para compilar archivos binarios arm64X, consulte Compilación de archivos binarios arm64X.
Fundamentalmente, un binario Arm64X contiene todo el contenido que estaría en archivos binarios x64/Arm64EC y Arm64, pero combinados en un archivo más eficaz en el disco. El binario arm64X compilado tiene dos conjuntos de código, puntos de entrada, etcetera., a la vez que elimina partes redundantes para ahorrar espacio en el disco.
Cuando una aplicación carga un binario Arm64X, el sistema operativo aplica transformaciones para exponer las secciones correctas en función de la arquitectura del proceso en el que se carga. Puede pensar en un binario Arm64X como imágenes 3D antiguas, con una imagen roja y azul que se puede ver a través de las lentes rojas o azules en un par de gafas 3D. Una aplicación x64 verá el archivo DLL como si fuera un archivo DLL x64, mientras que una aplicación arm64 verá el mismo archivo DLL que un archivo DLL de Arm64.
Las transformaciones del sistema operativo transparente permiten a las aplicaciones x64 y Arm64 cargar el mismo binario arm64X sin saber nunca que también contiene código correspondiente a la otra arquitectura. Por esa razón, los archivos binarios arm64X se denominan "camaleón" como toman el "color" de sus alrededores.
De forma predeterminada, los archivos binarios arm64X parecen ser binarios arm64. Esto permite que un sistema que ejecute Windows 10 en Arm, que no conoce el formato Arm64X o cómo aplicar transformaciones, para cargar el binario Arm64X en un proceso arm64 correctamente.
Windows 11 en Arm introdujo la capacidad de ejecutar aplicaciones x64 en Arm64. Sin embargo, a diferencia de la emulación x86, que incluye una SysWoW64
carpeta, no hay ninguna carpeta independiente de archivos binarios puros del sistema operativo x64. Con Windows 11 en Arm, tanto las aplicaciones x64 como las aplicaciones arm64 pueden cargar archivos binarios y llamar a las API mediante los archivos binarios de System32
. Esta flexibilidad es posible porque es posible que los archivos binarios de System32
esa aplicación deban cargarse se hayan vuelto a compilar como archivos binarios Arm64X.
Las aplicaciones x64 y Arm64 pueden cargar e interactuar con los archivos binarios de System32
, sin necesidad de una copia independiente de todos los archivos binarios del sistema, como SysWoW64
para x86.
La función principal de un binario Arm64X es habilitar un archivo en disco para admitir procesos x64/Arm64EC y Arm64. La mayoría de los desarrolladores de aplicaciones se centrarán en compilar su aplicación como Arm64EC o Arm64, no en ambos, en cuyo caso Arm64X probablemente no será necesario.
Sin embargo, los desarrolladores de middleware o complementos deben considerar Arm64X, ya que este código tiene la posibilidad de cargarse en procesos x64 o Arm64.
Puede admitir procesos x64 y Arm64 sin usar Arm64X, pero es posible que le resulte más fácil permitir que el sistema operativo controle la carga correcta de binario en un proceso de 64 bits determinado.
Entre las tres formas conceptuales de admitir ambas arquitecturas en Windows 11 en Arm se incluyen:
Archivos binarios independientes: dado que los procedimientos estándar de hoy usan archivos binarios independientes al admitir varias arquitecturas, es posible que la compilación y el envío de archivos binarios x64 y Arm64 independientes funcionen mejor para la solución. Puede usar los mecanismos existentes para asegurarse de que el binario correcto se carga en el proceso de arquitectura asociado.
Binario Arm64X: puede compilar un binario Arm64X que contenga todo el código x64/Arm64EC y Arm64 en un binario.
Reenviador puro arm64X: si necesita flexibilidad de Arm64X pero quiere evitar colocar todo el código de la aplicación en un binario Arm64X, puede optar por usar el enfoque de reenviador puro, donde se usa un pequeño binario Arm64X sin código para redirigir el cargador a la arquitectura correcta de DLL.
Hay algunas situaciones que requerirán el uso de un binario Arm64X para admitir aplicaciones x64 y Arm64. Entre ellos se incluyen:
- Un servidor COM de 64 bits al que pueden llamar las aplicaciones x64 o Arm64
- Un complemento que se puede cargar en una aplicación x64 o Arm64
- Un único binario que se inserta en un proceso x64 o Arm64
En cada uno de estos casos, puede usar un binario Arm64X o un reenviador puro arm64X para permitir que un binario admita ambas arquitecturas.
Para obtener más información sobre cómo compilar archivos binarios arm64X, consulte Compilación de archivos binarios arm64X.
Comentarios de Windows on Arm
Windows on Arm es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: