Windows on Armのx86/x86_64エミュレーション
x86/x86_64とArmでは命令セットアーキテクチャが異なるため、ArmアーキテクチャのCPUであるApple SiliconやQualcommのSnapdragonではx86/x86_64バイナリをそのまま動作させることはできません。Windows on Armでは様々な技術を用いてArm上でx86/x86_64をエミュレーションすることでユーザーモードのバイナリを実行できるようにしています。
この仕組みに関する技術資料へのリンクをまとめました。
Windows on Armでのx86/x86_64エミュレーション
-
Appearances are deceiving: Novel offensive techniques in Windows 10/11
株式会社FFRIセキュリティのKoh Nakagawa氏によるArm版Windowsでのx86/x86_64互換技術への攻撃方法のスライドです。主題はセキュリティですが、Arm版Windowsのx86/x86_64互換技術に関して日本語で説明している資料としては一番詳しいと思います。 -
ARM64 Boot Camp: The Windows on ARM Tutorials
Windows on ArmのWOW64のx86エミュレータxtajitの開発者でありx86_64互換に使われるARM64ECとARM64Xの仕様の設計者であるDarek Mihocka氏によるWindows on Armに関する詳細な解説です。特にARM64ECやx86/x64 Emulationについて機械語レベルでの非常に詳しい説明がされています。 - Arm でのエミュレーションのしくみ
- Arm64EC の概要
-
Arm64EC ABIについて
Windows on Armでのエミュレーションの概要と、x86_64互換に使われるARM64ECについての概要と実際のApplication Binary Interface(ABI)に関するMicrosoftの解説です。
メモリオーダリング
Armとx86/x86_64ではメモリーオーダリングが異なります。なんらかの対策がないとArmでx86/x86_64のマルチスレッドやマルチプロセスのアプリケーションをエミュレーションするのは困難です。メモリオーダリングはややこしいので、資料のリンクを貼ります。
-
The Qualcomm Snapdragon X Architecture Deep Dive: Getting To Know Oryon and Adreno X1
A Note on x86 Emulation以下にQualcommのSnapdragon X EliteのCPUコアであるOryonでのx86/x86_64エミュレーションに関する解説があり、Apple Silicon同様のx86_64との互換モードがあると推測しています。 -
プログラマーのためのCPU 入門 CPU は如何にしてソフトウェアを高速に実行するか
CPUの高速化の仕組みの関する書籍で、第11章でメモリーオーダリングを取り扱っています。日本語で書かれた文書では一番わかりやすくメモリーオーダリングについて説明していると思います。 -
A Primer on Memory Consistency and Cache Coherence
Daniel Sorin氏Mark Hill氏David Wood氏によるメモリーオーダリングを含めたメモリの一貫性とキャッシュに関する書籍です。非常に詳細な説明がされています。
WineでのARM64EC
-
WineのWikiのARM64EC-Toolchain
LinuxやmacOS等でWindowsアプリケーションを動かせるようにする互換レイヤーであるWineでのARM64EC対応に関する解説です(2025/2/20追加)。