Udostępnij przez


Pliki ARM64X PE

Arm64X to nowy typ danych binarnych, który może zawierać zarówno klasyczny kod Arm64, jak i kod Arm64EC razem. Ta podwójna zgodność sprawia, że Arm64X nadaje się zarówno do klasycznych procesów Arm64, jak i Arm64EC na urządzeniu z systemem Windows na Arm. Jest to szczególnie dobre rozwiązanie dla oprogramowania pośredniczącego lub wtyczek, których używają oba interfejsy ABI.

Wprowadzony w zestawie SDK systemu Windows 11 plik binarny Arm64X jest typem przenośnego pliku wykonywalnego (PE), który współpracuje zarówno z systemem Windows 11 w usłudze Arm, jak i Windows 10 w usłudze Arm. Aby skompilować pliki binarne Arm64X, zobacz Build Arm64X Binaries (Kompilowanie plików binarnych Arm64X).

Jak działają pliki binarne Arm64X?

Zasadniczo plik binarny Arm64X zawiera całą zawartość, która byłaby w osobnych plikach binarnych x64/Arm64EC i Arm64, ale scala je w jeden bardziej wydajny plik na dysku. Skompilowany plik binarny Arm64X ma dwa zestawy kodu, punktów wejścia i innych elementów, eliminując nadmiarowe części, aby zaoszczędzić miejsce na dysku.

Gdy aplikacja ładuje plik binarny Arm64X, system operacyjny stosuje przekształcenia, aby uwidocznić poprawne sekcje w zależności od architektury procesu. Można myśleć o pliku binarnym Arm64X, jak o starych obrazach 3D, ze zintegrowanymi obrazami czerwonym i niebieskim, które można oglądać poprzez czerwone lub niebieskie soczewki pary okularów 3D. Aplikacja x64 widzi bibliotekę DLL tak, jakby była to biblioteka DLL x64, podczas gdy aplikacja Arm64 widzi tę samą bibliotekę DLL co biblioteka DLL Arm64.

Grafika transformacji Arm64X przedstawiająca okulary 3D z czerwonymi i niebieskimi obiektywami

Przezroczyste przekształcenia systemu operacyjnego umożliwiają zarówno aplikacjom x64, jak i Arm64 ładowanie tego samego pliku binarnego Arm64X bez znajomości, że zawiera również kod dla innej architektury. Z tego powodu ludzie nazywają binaria Arm64X "kameleonami", ponieważ przyjmują "kolor" otoczenia.

Domyślnie pliki binarne Arm64X wydają się być plikami binarnymi Arm64. To ustawienie domyślne umożliwia systemowi z Windows 10 na Arm, który nie rozpoznaje formatu Arm64X ani nie wie, jak zastosować przekształcenia, pomyślne załadowanie pliku binarnego Arm64X do procesu Arm64.

W jaki sposób system operacyjny korzysta z plików binarnych Arm64X?

System Windows 11 na Arm wprowadził możliwość uruchamiania aplikacji x64 na Arm64. Jednak w przeciwieństwie do emulacji x86, która zawiera SysWoW64 folder, nie ma oddzielnego folderu czystych plików binarnych systemu operacyjnego x64. W systemie Windows 11 na platformie Arm zarówno aplikacje x64, jak i aplikacje Arm64 mogą ładować pliki binarne i wywoływać interfejsy API przy użyciu plików binarnych w System32. Ta elastyczność jest możliwa, ponieważ deweloperzy ponownie kompilują wszystkie pliki binarne w System32, których aplikacja może potrzebować, aby mogła załadować je jako pliki binarne Arm64X.

Zarówno aplikacje x64, jak i Arm64 mogą ładować i współdziałać z binariami w System32 bez potrzeby posiadania osobnych kopii wszystkich systemowych plików binarnych, takich jak te dla architektury SysWoW64 x86.

Pliki binarne zgodne z architekturą x64 i Arm64 w folderach System32

Arm64X do użycia z oprogramowaniem pośredniczącym lub wtyczkami

Podstawową funkcją pliku binarnego Arm64X jest włączenie jednego pliku na dysku w celu obsługi zarówno procesów x64/Arm64EC, jak i Arm64. Większość deweloperów aplikacji koncentruje się na tworzeniu aplikacji jako Arm64EC lub Arm64, a nie obu, więc prawdopodobnie nie potrzebujesz Arm64X.

Jednak deweloperzy oprogramowania pośredniczącego lub wtyczek powinni wziąć pod uwagę arm64X, ponieważ taki kod może ładować się do procesów x64 lub Arm64.

Można obsługiwać zarówno procesy x64, jak i Arm64 bez użycia architektury Arm64X, ale łatwiej jest umożliwić systemowi operacyjnemu obsługę ładowania prawidłowej architektury binarnej do danego procesu 64-bitowego.

Trzy podejścia do obsługi aplikacji oddzielnymi plikami binarnymi: binarny plik Arm64x, czysty pośrednik Arm64X łączący x64/Arm64EC z binarnymi plikami Arm64

Trzy koncepcyjne sposoby obsługi obu architektur w systemie Windows 11 w usłudze Arm obejmują:

  • Oddzielne pliki binarne: ponieważ obecnie standardowe rozwiązania używają oddzielnych plików binarnych podczas obsługi wielu architektur, możesz zauważyć, że kompilowanie i wysyłanie oddzielnych plików binarnych x64 i Arm64 działa lepiej dla rozwiązania. Istniejące mechanizmy umożliwiają upewnienie się, że prawidłowe obciążenia binarne są ładowane do skojarzonego procesu architektury.

  • Plik binarny Arm64X: możesz utworzyć plik binarny Arm64X zawierający cały kod x64/Arm64EC i Arm64 w jednym pliku binarnym.

  • Czysta metoda przekazywania dalej Arm64X: Jeśli potrzebujesz elastyczności Arm64X, ale chcesz uniknąć umieszczania całego kodu aplikacji w binariach Arm64X, możesz użyć czystej metody przekazywania dalej. Mały plik binarny Arm64X bez kodu przekierowuje moduł ładujący do prawidłowej architektury biblioteki DLL.

Przykładowe sytuacje wymagające arm64X

Niektóre sytuacje wymagają użycia pliku binarnego Arm64X do obsługi aplikacji x64 i Arm64. Te sytuacje obejmują:

  • 64-bitowy serwer COM, który jest wywoływany zarówno przez aplikacje x64, jak i Arm64
  • Wtyczka, która ładuje się do aplikacji x64 lub Arm64
  • Pojedynczy plik binarny, który jest wstrzykiwany do procesu x64 lub Arm64

W każdym z tych przypadków można użyć pliku binarnego Arm64X lub czystej usługi przesyłania dalej Arm64X, aby umożliwić obsługę obu architektur binarnych.

Aby uzyskać szczegółowe informacje na temat kompilowania plików binarnych Arm64X, zobacz Build Arm64X binaries (Kompilowanie plików binarnych Arm64X).