WABT(「wabbit」と発音)は参照 WebAssembly Binary Toolkit — wasm を低レベルで操作するコマンドラインツールスイート。バイナリ .wasm 形式と人間が読める .wat テキスト形式の相互変換、モジュールのディスアセンブルとダンプ、検証、C ライク逆コンパイル生成、wasm の解釈/実行が可能。wasm 開発とリバースエンジニアリングの基礎的なツールボックス。
インストール
| プラットフォーム | コマンド |
|---|
| macOS(Homebrew) | brew install wabt |
| Debian/Ubuntu | sudo apt install wabt |
| Arch Linux | sudo pacman -S wabt |
| npm | npm install -g wabt |
| ソースから | WebAssembly/wabt リポジトリから CMake でビルド |
| 確認 | wat2wasm --version |
コアツール
| ツール | 変換・実行内容 |
|---|
wat2wasm | テキスト .wat → バイナリ .wasm |
wasm2wat | バイナリ .wasm → テキスト .wat(ディスアセンブル) |
wasm-objdump | sections、opcodes、symbols をダンプ |
wasm-decompile | 読める C ライク疑似コード生成 |
wasm-validate | モジュール検証 |
wasm-interp | モジュール解釈/実行(スタックマシン) |
wasm2c | wasm → C ソース変換 |
wasm-strip | モジュールから sections を削除(名前など) |
テキスト ↔ バイナリ
# テキストをバイナリにアセンブル
wat2wasm module.wat -o module.wasm
# バイナリをテキストにディスアセンブル(RE 開始地点)
wasm2wat module.wasm -o module.wat
# ディスアセンブル中にデバッグ名/カスタム sections を保持
wasm2wat --generate-names module.wasm
| オプション | 効果 |
|---|
-o FILE | 出力ファイル |
--generate-names | 名前のない関数/ローカルに合成名を生成 |
--enable-FEATURE | wasm proposal を有効化(例 --enable-threads) |
-v | Verbose |
モジュール検査(objdump)
# 完全な section + ディスアセンブリダンプ
wasm-objdump -x module.wasm # headers/sections
wasm-objdump -d module.wasm # コード ディスアセンブル
wasm-objdump -s module.wasm # section 内容(hex)
| フラグ | 表示内容 |
|---|
-h | Section ヘッダー |
-x | すべての sections の詳細 |
-d | ディスアセンブルされた関数本体 |
-s | 生の section 内容 |
-j SECTION | 1 つの section に制限 |
デコンパイル(読める出力)
# C ライクなデコンパイル — WAT より読みやすい
wasm-decompile module.wasm -o module.dcmp
wasm-decompile は構造化制御フロー型付きローカルを復元し、トリアージ中に何をモジュールが行うかを理解する高速な方法。
検証・実行
| コマンド | 目的 |
|---|
wasm-validate module.wasm | モジュールが整形式であることを確認 |
wasm-interp module.wasm --run-all-exports | エクスポート関数を実行 |
wasm2c module.wasm -o module.c | コンパイル/分析用 C を出力 |
リバースエンジニアリングワークフロー
# 1) 名前をつけてディスアセンブル
wasm2wat --generate-names target.wasm -o target.wat
# 2) imports/exports をダンプして機能を理解
wasm-objdump -x target.wasm | grep -E "import|export"
# 3) 読める疑似コード取得
wasm-decompile target.wasm -o target.dcmp
# 4) data sections の文字列/URL 狩り
wasm-objdump -s target.wasm | less
フィーチャーフラグ(Proposals)
| フラグ | 有効化 |
|---|
--enable-threads | スレッド/atomics |
--enable-simd | SIMD |
--enable-bulk-memory | bulk memory ops |
--enable-reference-types | 参照型 |
--enable-all | サポート proposals すべて |
モジュールが新しい wasm フィーチャーを使用し、デフォルトツールが拒否する場合に使用。
WABT vs 関連ツール
| ツール | 役割 |
|---|
| WABT | wasm 変換/検査/検証/デコンパイル |
| diswasm | 高レベル疑似コードデコンパイラ |
| wasm-tools | Rust 低レベル操作 |
| Binaryen | コンパイラ/最適化ツールチェーン(wasm-dis 、 wasm-opt) |
リソース