コンテンツにスキップ

WABT - WebAssembly Binary Toolkit チートシート

WABT - WebAssembly Binary Toolkit チートシート

WABT(「wabbit」と発音)は参照 WebAssembly Binary Toolkit — wasm を低レベルで操作するコマンドラインツールスイート。バイナリ .wasm 形式と人間が読める .wat テキスト形式の相互変換、モジュールのディスアセンブルとダンプ、検証、C ライク逆コンパイル生成、wasm の解釈/実行が可能。wasm 開発とリバースエンジニアリングの基礎的なツールボックス。

インストール

プラットフォームコマンド
macOS(Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
ソースからWebAssembly/wabt リポジトリから CMake でビルド
確認wat2wasm --version

コアツール

ツール変換・実行内容
wat2wasmテキスト .wat → バイナリ .wasm
wasm2watバイナリ .wasm → テキスト .wat(ディスアセンブル)
wasm-objdumpsections、opcodes、symbols をダンプ
wasm-decompile読める C ライク疑似コード生成
wasm-validateモジュール検証
wasm-interpモジュール解釈/実行(スタックマシン)
wasm2cwasm → 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-FEATUREwasm proposal を有効化(例 --enable-threads
-vVerbose

モジュール検査(objdump)

# 完全な section + ディスアセンブリダンプ
wasm-objdump -x module.wasm      # headers/sections
wasm-objdump -d module.wasm      # コード ディスアセンブル
wasm-objdump -s module.wasm      # section 内容(hex)
フラグ表示内容
-hSection ヘッダー
-xすべての sections の詳細
-dディスアセンブルされた関数本体
-s生の section 内容
-j SECTION1 つの 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-simdSIMD
--enable-bulk-memorybulk memory ops
--enable-reference-types参照型
--enable-allサポート proposals すべて

モジュールが新しい wasm フィーチャーを使用し、デフォルトツールが拒否する場合に使用。

WABT vs 関連ツール

ツール役割
WABTwasm 変換/検査/検証/デコンパイル
diswasm高レベル疑似コードデコンパイラ
wasm-toolsRust 低レベル操作
Binaryenコンパイラ/最適化ツールチェーン(wasm-diswasm-opt

リソース