パス¶
Kagura は LLVM の New Pass Manager 上に構築されています。各変換は個別のパスで、-kagura-<name> フラグまたは JSON ポリシー で個別に有効化します。
パスは目的別に分類されています:
- 制御フロー — CFG をフラット化、偽の分岐を注入、BB を分割・並び替え、呼び出しを間接化。
- データ難読化 — 文字列、定数、グローバル、alloca 値を暗号化。
- アンチ解析 — デバッガ / フックフレームワークの検出、整合性検証、シンボル隠蔽。
- プラットフォーム固有 — ObjC セレクタ / クラス名難読化、JNI 動的登録、VM 仮想化。
- インフラ — DWARF 制御、設定ローダ、シンボルマップ、監査ログ。
関連:
- Before / After 例 — IR とデコンパイラ出力が実際にどう変わるか。
- パフォーマンス・サイズ影響 — 代表的なモバイルゲームモジュールで実測したオーバーヘッド。
- パス順序 —
registerOptimizerLastEPCallbackで登録される決定論的パイプライン。 - チューニングパラメータ —
bcf-prob,seed, イテレーション回数、シンボルフィルタ。