Compartilhar via


Arquivos PE do Arm64X

Arm64X é um novo tipo de binário que pode conter o código Arm64 clássico e o código Arm64EC juntos. Isso torna o Arm64x compatível com os processos clássicos do Arm64 e do Arm64EC em um dispositivo Windows no Arm e uma opção particularmente boa para middleware ou plug-ins que podem ser usados por ambas as ABIs.

Introduzido no SDK do Windows 11, o binário Arm64X é um tipo de arquivo PE (Portable Executable) que funciona com Windows 11 no Arm e Windows 10 no Arm. Para criar binários Arm64X, consulte Criar binários Arm64X.

Como funcionam os binários Arm64X?

Fundamentalmente, um binário Arm64X contém todo o conteúdo que estaria em binários x64/Arm64EC e Arm64 separados, mas mesclados em um arquivo mais eficiente no disco. O binário Arm64X construído tem dois conjuntos de código, pontos de entrada, etc., enquanto elimina partes redundantes para economizar espaço no disco.

Quando um binário Arm64X é carregado por um aplicativo, o sistema operacional aplica transformações para expor as seções corretas, dependendo da arquitetura do processo em que está sendo carregado. Você pode pensar em um binário Arm64X como imagens 3D antigas, com uma imagem vermelha e azul que pode ser vista através das lentes vermelhas ou azuis em um par de óculos 3D. Um aplicativo x64 verá a DLL como se fosse uma DLL x64, enquanto um aplicativo Arm64 verá a mesma DLL que uma DLL Arm64.

Gráfico de transformação Arm64X mostrando óculos 3D com lentes vermelhas e azuis

As transformações transparentes do sistema operacional permitem que os aplicativos x64 e Arm64 carreguem o mesmo binário Arm64X sem nunca saber que ele também contém código correspondente à outra arquitetura. Por esse motivo, os binários Arm64X são apelidados de 'camaleão', pois assumem a 'cor' de seus arredores.

Por padrão, os binários Arm64X parecem ser binários Arm64. Isso permite que um sistema que executa Windows 10 no Arm, que não conhece o formato Arm64X ou como aplicar transformações, carregue o binário Arm64X em um processo Arm64 com êxito.

Como o sistema operacional usa binários Arm64X?

O Windows 11 no Arm introduziu a capacidade de executar aplicativos x64 no Arm64. No entanto, ao contrário da emulação x86, que inclui uma SysWoW64 pasta, não há uma pasta separada de binários do sistema operacional x64 puro. Com o Windows 11 no Arm, os aplicativos x64 e os aplicativos Arm64 podem carregar binários e chamar APIs usando os binários no System32. Essa flexibilidade é possível porque todos os binários em System32 que um aplicativo pode precisar carregar foram recompilados como binários Arm64X.

Os aplicativos x64 e Arm64 podem carregar e interagir com os binários no System32, sem a necessidade de uma cópia separada de todos os binários do sistema, como SysWoW64 para x86.

Binários compatíveis com x64 e Arm64 em pastas System32

Arm64X para uso com middleware ou plug-ins

A função principal de um binário Arm64X é permitir que um arquivo no disco dê suporte a processos x64/Arm64EC e Arm64. A maioria dos desenvolvedores de aplicativos se concentrará em criar seu aplicativo como Arm64EC ou Arm64, não ambos, caso em que o Arm64X provavelmente não será necessário.

No entanto, o Arm64X deve ser considerado pelos desenvolvedores de middleware ou plug-ins, porque esse código tem o potencial de ser carregado em processos x64 ou Arm64.

Você pode dar suporte a processos x64 e Arm64 sem usar o Arm64X, mas pode achar que é mais fácil permitir que o sistema operacional lide com o carregamento da arquitetura correta do binário em um determinado processo de 64 bits.

Três abordagens para dar suporte a binários separados de aplicativos, binário Arm64x, encaminhador puro Arm64X combinando binários x64/Arm64EC com Arm64

Três maneiras conceituais de dar suporte a ambas as arquiteturas no Windows 11 no Arm incluem:

  • Binários separados: como as práticas padrão hoje usam binários separados ao dar suporte a várias arquiteturas, você pode descobrir que criar e enviar binários x64 e Arm64 separados funciona melhor para sua solução. Você pode usar seus mecanismos existentes para garantir que o binário correto seja carregado no processo de arquitetura associado.

  • Binário Arm64X: você pode criar um binário Arm64X que contém todo o código x64/Arm64EC e Arm64 em um binário.

  • Arm64X encaminhador puro: se você precisar de flexibilidade do Arm64X, mas quiser evitar colocar todo o código do aplicativo em um binário Arm64X, poderá optar por usar a abordagem de encaminhador puro, em que um pequeno binário Arm64X sem código é usado para redirecionar o carregador para a arquitetura correta da DLL.

Exemplos de situações que exigiriam Arm64X

Há algumas situações que exigirão o uso de um binário Arm64X para dar suporte a aplicativos x64 e Arm64. Esses incluem:

  • Um servidor COM de 64 bits que pode ser chamado por aplicativos x64 ou Arm64
  • Um plug-in que pode ser carregado em um aplicativo x64 ou Arm64
  • Um único binário que é injetado em um processo x64 ou Arm64

Em cada um desses casos, você pode usar um binário Arm64X ou um encaminhador puro Arm64X para permitir que um binário dê suporte a ambas as arquiteturas.

Para obter detalhes sobre como criar binários Arm64X, consulte Criar binários Arm64X.