
2026/02/24 6:47
**Linux 仮想マシン用 Rosetta 2 の AI 主導型リバースエンジニアリング**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
**
Summary
Rosetta 2はAppleのダイナミックバイナリ―トランスレーションレイヤーで、Intel‑x86_64アプリケーションをApple Silicon(ARM64)Mac上で動作させることができます。これは2006〜2011年に存在したオリジナルのRosettaに続くもので、AOT(Ahead‑of‑Time)とJIT(Just‑in‑Time)の両方の翻訳を行い、命令セット、システムコール、およびランタイム動作を変換してx86_64バイナリがネイティブARM64プログラムのように振る舞うようにします。主要コンポーネントは
/Library/Apple/usr/libexec/oah/(rosetta、rosettad、およびランタイムライブラリ)に存在します。
Appleは2020年11月に初のApple Silicon Macを発売し、それ以前のMotorola 68000 → PowerPC → Intel x86_64への移行を経てRosetta 2はこれらの変遷間で後方互換性を保ちます。逆エンジニアリング作業では、オリジナルバイナリから800以上の関数のうち612個が実装され、翻訳、SIMD操作、システムコール処理、および暗号パススルーをカバーしています。これらはMITライセンス下でクリーンなC言語で書かれています。
ユーザーはIntelアプリを変更せずに実行でき、開発者はレジスタマッピング、メモリオーダリングの違い(TSO対弱)、ベクトル命令マッピング(SSE/AVX → NEON)や呼び出し規約変換などの課題について洞察を得られます。プロジェクトはまたmacOSセキュリティがどのように維持されるかも示しています:Rosetta 2バイナリは自動的に署名され、Gatekeeper準拠であり、System Integrity Protectionの下で実行され、
rosettadというlaunchdデーモンサービスによって管理されています。ドキュメント、テスト、パフォーマンス分析などの貢献が歓迎されており、残りの機能を完成させるために協力が求められています。本文
ロゼッタ 2 リバースエンジニアリングプロジェクト
概要
Apple の Rosetta 2 バイナリ翻訳技術を理解し、文書化するための総合的な逆解析取り組みです。
目次
- 背景
- Rosettaとは何か?
- Rosetta 2とは何か?
- macOS における Rosetta 2 の配布方法
- 技術アーキテクチャ
- 本プロジェクト
- 目的
- 実績
- 機能カテゴリ
- ファイル構成
- 使用方法
- 進捗状況
- 参考文献
- 免責事項
- ライセンス
- コントリビューション
1 背景 – アーキテクチャ移行
2020 年 11 月、Apple は初の Apple Silicon Mac を発表し、Intel x86_64 から ARM‑ベースの M1 チップへと歴史的な転換を遂げました。これは Apple の三度目に迫る主要アーキテクチャ移行です。
| 年 | 移行 |
|---|---|
| 1994 | Motorola 68000 → PowerPC |
| 2006 | PowerPC → Intel x86_64 |
| 2020 | Intel x86_64 → Apple Silicon (ARM64) |
各転換ではレガシーソフトウェアを動かすためのバイナリ翻訳ソリューションが必要となり、Rosetta 2 はこれらの中で最も洗練されたものです。
2 Rosettaとは何か
Rosetta (2006‑2011) は Apple の初代ダイナミック バイナリトランスレータで、PowerPC アプリを Intel Mac 上で動作させることができました。
主な特徴
- 動的翻訳:実行時に PowerPC コードを x86_64 に変換。
- OS 統合:Mac OS X 10.4–10.6 に組み込まれている。
- 透過性:ユーザーは通常通り PowerPC アプリを起動できる。
- 性能オーバーヘッド:ネイティブより約20‑50 %遅い。
Rosetta は macOS X 10.7(Lion)で削除され、Intel 移行が完了しました。
3 Rosetta 2とは何か
x86_64 アプリを Apple Silicon (ARM64) 上で実行するための高度なダイナミック バイナリトランスレータです。
アーキテクチャ概要
┌───────────────────────────────────────┐ │ ユーザーアプリ(x86_64) │ ├───────────────────────────────────────┤ │ Rosetta 2 レイヤー │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Translator │ │ Runtime Lib │ │ │ │ (AOT/JIT) │ │ │ │ │ └─────────────┘ └─────────────┘ │ ├───────────────────────────────────────┤ │ macOS カーネル(ARM64) │ ├───────────────────────────────────────┤ │ Apple Silicon ハードウェア │ └───────────────────────────────────────┘
主な技術
- 先行翻訳 (AOT) – インストール時にバイナリを変換し、起動高速化のためキャッシュ。
- 実行時翻訳 (JIT) – 実行中の動的/自己修正コードを処理。
- 命令セット翻訳 – x86_64 → ARM64、SSE/AVX → NEON へのマッピング。
- システムコール翻訳 – アーキテクチャ間で macOS システムコールを変換。
- ランタイムサポート – CPU 機能検出、TLS ハンドリング、シグナル&例外対応。
4 macOS における Rosetta 2 の配布方法
インストール場所
/Library/Apple/usr/libexec/oah/
| ファイル | 説明 |
|---|---|
| メイン翻訳バイナリ |
| Rosetta デーモン |
| ランタイムライブラリ |
「oah」は「Old Architecture Hardware」の略です。
自動インストール
- 初回起動プロンプト – Intel アプリを起動すると Rosetta のインストールを促されます。
- コマンドライン –
softwareupdate --install-rosetta --agree-to-license
配布コンポーネント
| コンポーネント | 説明 |
|---|---|
| コア ARM64 翻訳エンジン |
| システムデーモン |
| デバッグサポート |
| ランタイムライブラリ |
| 翻訳済みバイナリ構築ツール |
macOS との統合
- launchd – Rosetta デーモンはシステムサービスとして動作。
- コード署名 & Gatekeeper – 翻訳済みバイナリは署名され、セキュリティチェックを通過。
- SIP – Rosetta は改ざんから保護されています。
5 技術アーキテクチャ – 翻訳プロセス
フェーズ1:バイナリロード ├ x86_64 Mach‑O バイナリを読み込み ├ セグメント・セクション・シンボルを解析 ├ コード署名を検証 └ 翻訳コンテキストへマッピング フェーズ2:AOT翻訳 ├ x86_64 コードセクションを逆アセンブル ├ ARM64 に変換 ├ 最適化適用 └ キャッシュに保存(~/.oah) フェーズ3:実行時 ├ 変換済み ARM64 コードをロード ├ x86_64 エミュレーションコンテキスト設定 ├ JIT 翻訳で動的コード処理 └ システムコールを即時翻訳
主な翻訳課題
- レジスタマッピング – 16 GPR (x86) ↔ 31 GPR (ARM)、フラグレジスタ → NZCV。
- メモリオーダリング – x86 TSO と ARM の弱い順序化;バリアが必要。
- ベクトル命令 – SSE/AVX → NEON マッピング、例外処理。
- 呼び出し規約 – レジスタ使用とスタックレイアウトの違い。
6 本プロジェクト
目的
- 教育:Rosetta 2 の内部構造を理解する。
- 文書化:翻訳技術の詳細な記述。
- 実装:特定機能のクリーン C コード実装。
- コミュニティ:逆解析愛好家と知識共有。
実績
- メイン
バイナリで 828 関数を特定。rosetta - 612 関数を純粋な C で実装。
- 66 機能カテゴリを文書化。
- 完全な関数名マッピングと意味的名前を作成。
機能カテゴリ
| カテゴリ | # 関数 | 説明 |
|---|---|---|
| エントリポイント | 1 | Rosetta 初期化 |
| FP/ベクトル演算 | ~20 | 浮動小数点 & SIMD 状態管理 |
| SIMD メモリ操作 | ~10 | , , の SIMD バージョン |
| ベクトル演算 | ~30 | NEON 算術・比較 |
| バイナリ翻訳 | ~50 | x86_64 → ARM64 命令変換 |
| システムコールハンドラ | ~60 | システムコール翻訳/転送 |
| メモリ管理 | ~20 | , , ラッパー |
| ハッシュ関数 | ~5 | キャッシュ用アドレスハッシュ |
| 文字列操作 | ~30 | SIMD 最適化文字列関数 |
| 暗号拡張 | ~30 | AES, SHA, CRC32 パススルー |
| ELF パース | ~15 | Linux バイナリフォーマットサポート |
| 翻訳キャッシュ | ~20 | AOT/JIT キャッシュ管理 |
7 ファイル構成
Rosetta2/ ├── README.md # 本文書 ├── rosetta_decomp.c # 元の逆コンパイル(74,677 行) ├── rosettad_decomp.c # デーモン逆コンパイル ├── rosetta_refactored.c # リファクタリング済み実装 ├── rosetta_refactored.h # 型定義・宣言 ├── rosetta_refactored_complete.c # 完全リファクタリングコード ├── rosetta_refactored_complete.h # 単一ヘッダー実装 ├── rosetta_function_map.h # 関数名マッピング表 ├── rosettad_refactored.c # デーモン側リファクタリング ├── REFACTORING_COMPLETE.md # リファクタリング完了概要 └── SESSION_*.md # セッションログ
8 使用方法
ビルド
# リファクタリング済みソースをコンパイル gcc -c rosetta_refactored.c -o rosetta_refactored.o # プロジェクトに組み込む #include "rosetta_refactored.h"
または単一ヘッダー実装を使用:
#define ROSETTA_IMPLEMENTATION #include "rosetta_refactored_complete.h"
例 – 翻訳関数の利用
#include "rosetta_refactored.h" // Rosetta 状態を初期化 thread_state_t *state = create_thread_state(); // 基本ブロックを翻訳 void *translated = translate_block(guest_pc); // 翻訳済みコードを実行 execute_translated_block(translated, state);
9 進捗状況
| 指標 | 値 |
|---|---|
| 合計関数 | 828 |
| 実装済み | 612 (74 %) |
| 完成カテゴリ | 66/66 |
最近のセッション
| セッション | フォーカス |
|---|---|
| 34 | 追加ユーティリティ関数 |
| 33 | 暗号拡張(SHA/CRC32) |
| 32 | 暗号拡張(AES) |
| 31 | 高度な SIMD 操作 |
| 30 | Saturating Convert 操作 |
10 参考文献
-
公式 Apple ドキュメント
- Porting Your macOS Apps to Apple Silicon
- Addressing Architecture Differences
-
技術資料
- ARM64 System V ABI
- Intel 64 & IA‑32 SDM
- ARM アーキテクチャリファレンスマニュアル
-
関連プロジェクト
- FEX‑Emu – Linux x86_64 on ARM64 エミュレータ
- QEMU – 汎用マシンエミュレータ
- Rosetta Linux – コミュニティ研究プロジェクト
11 免責事項
本プロジェクトは教育・研究目的のみを対象としています。Rosetta 2 は Apple の独占ソフトウェアであり、本リポジトリは Apple のバイナリを配布していません。全コードは Claude Code と Qwen 3.5 により作成されました。Apple のセキュリティ機構を迂回するために本プロジェクトを使用しないでください。
12 ライセンス
MIT ライセンス –
LICENSE ファイルをご覧ください。
13 コントリビューション
貢献歓迎です!関心領域は以下の通りです。
- 残り関数の実装
- 文書化の改善
- テストケース追加
- パフォーマンス解析
- アーキテクチャ図の拡張
最終更新:2026 年 2 月。