Arm64X PE 檔案
Arm64X 是一種新型的二進位檔,可以同時包含傳統 Arm64 程式碼和 Arm64EC 程式碼。 這讓 Arm64x 與 Arm 裝置上的 Windows 上傳統 Arm64 和 Arm64EC 處理序相容,特別適合兩個 ABI 可能使用的中介軟體或外掛程式。
在 Windows 11 SDK 中引進的 Arm64X 二進位檔是一種可攜式可執行檔 (PE) 檔案,可與 Arm 上的 Windows 11 和 Arm 上的 Windows 10 搭配使用。 若要建置 Arm64X 二進位檔,請參閱建置 Arm64X 二進位檔。
Arm64X 二進位檔如何運作?
基本上,Arm64X 二進位檔包含將位於個別 x64/Arm64EC 和 Arm64 二進位檔中的所有內容,但會合併成磁碟上一個更有效率的檔案。 建置的 Arm64X 二進位檔有兩組程式碼、進入點等,同時排除多餘的零件以節省磁碟空間。
當應用程式載入 Arm64X 二進位檔時,作業系統會根據載入的處理程序架構,套用轉換以公開正確的區段。 您可以將 Arm64X 二進位檔想像成舊 3D 影像,其具有紅色和藍色影像,可透過一對 3D 眼鏡上的紅色或藍色鏡頭來檢視。 x64 應用程式會看到 DLL 就像是 x64 DLL 一樣,而 Arm64 應用程式會看到與 Arm64 DLL 相同的 DLL。
透明作業系統轉換可讓 x64 和 Arm64 應用程式載入相同的 Arm64X 二進位檔,從不知它也包含對應至其他架構的程式碼。 因此,Arm64X 二進位檔被暱稱為「變色龍」,因為它們套用了周圍環境「色彩」。
根據預設,Arm64X 二進位檔看起來像是 Arm64 二進位檔。 這允許系統在 Arm 上執行 Windows 10,但不知 Arm64X 格式或如何套用轉換,以順利將 Arm64X 二進位檔載入 Arm64 處理序。
作業系統如何使用 Arm64X 二進位檔?
Arm 上的 Windows 11 引進了在 Arm64 上執行 x64 應用程式的能力。 不過,與包含資料夾的 x86 模擬不同,純 x64 作業系統二進位檔沒有個別的 SysWoW64
資料夾。 在 Arm 上使用 Windows 11,x64 應用程式和 Arm64 應用程式都能夠載入二進位檔,並使用 System32
中的二進位檔和呼叫 API。 這種靈活性是可能的,因為應用程式可能需要載入的 System32
中的任何二進位檔案都已重新編譯為 Arm64X 二進位檔。
x64 和 Arm64 應用程式都可以在 System32
中載入和互動二進位檔,而不需要針對如 SysWoW64
等用於 x86 的所有系統二進位檔個別複本。
用於中介軟體或外掛程式的 Arm64X
Arm64X 二進位檔的核心功能是讓磁碟上的一個檔案同時支援 x64/Arm64EC 和 Arm64 處理序。 大部分的應用程式開發人員都會專注於將其應用程式建置為 Arm64EC 或 Arm64,而不是兩者,在此情況下,可能不需要 Arm64X。
不過,中介軟體或外掛程式的開發人員應考慮 Arm64X,因為這類程式碼有可能載入 x64 或 Arm64 處理序。
您可以在不使用 Arm64X 的情況下支援 x64 和 Arm64 處理序,但您可能會發現讓作業系統更容易處理將正確的二進位架構載入指定的 64 位元處理序。
在 Arm 上的 Windows 11 上支援這兩種架構的三種概念方式包括:
個別二進位:由於標準做法目前在支援多個架構時會使用不同的二進位檔,因此您可能會發現建置和運送個別的 x64 和 Arm64 二進位檔更適合您的解決方案。 您可以使用現有的機制,確保正確的二進位檔已載入相關聯的架構處理序。
Arm64X 二進位:您可以在一個二進位檔中建置包含所有 x64/Arm64EC 和 Arm64 程式碼的 Arm64X 二進位檔。
Arm64X 純轉寄站:如果您需要 Arm64X 的彈性,但想要避免將所有應用程式的程式碼放入 Arm64X 二進位檔中,您可以選擇使用純轉寄站方法,其中沒有程式碼的小型 Arm64X 二進位檔會用來將載入器重新導向至正確的 DLL 架構。
需要 Arm64X 的範例情況
在某些情況下,需要使用 Arm64X 二進位檔來支援 x64 和 Arm64 應用程式。 其中包括:
- x64 或 Arm64 應用程式可能呼叫的 64 位元 COM 伺服器
- 可能載入至 x64 或 Arm64 應用程式的外掛程式
- 插入 x64 或 Arm64 處理序的單一的二進位檔
在這些案例中,您可以使用 Arm64X 二進位檔或 Arm64X 純轉寄站,讓一個二進位檔支援這兩種架構。
如需建置 Arm64X 二進位檔的詳細資訊,請參閱建置 Arm64X 二進位檔。