WASM Inspector binary ↔ WAT ↔ hex
MODULE (.wasm)
🧩
Drop .wasm file here
or click to browse
ソース(.c など)も一緒に選べます
DROP A .wasm FILE TO START
解析はすべてブラウザ内で行います。ファイルは送信されません。
Processing...
HEX —
WASM Inspector — HELP

何をするツールか

.wasm ファイルを読み込み、中身を WAT(テキスト形式)・hex(生のバイト列)・セクション構造の 3 つの見方で同時に表示します。どこにカーソルを乗せても、他の 2 つの対応する場所が光ります。解析はすべてブラウザ内で行い、ファイルは送信しません。

画面

左読み込み、ファイル情報、セクション一覧(サイズのバー付き)、関数一覧(未入力時はサイズ順)
中央 WATMODULE → セクション → 関数 の順に開いていく階層表示。左端の数字はその行のバイトオフセット
中央 STATSセクション別サイズ、大きい関数、使用している機能(SIMD / Threads など)、オペコードの出現頻度
右 HEXファイル全体のバイト列。文字色はセクションの種類(凡例は下)。code セクション内は関数ごとに明暗が交互になる
右下ステータスバー。オフセット、範囲、所属(パス)、命令の意味とスタック効果、ソース位置を表示

マウス操作

WAT の行にホバー対応するバイトが hex でオレンジに光る。命令ならオペコード部分が濃く、即値部分が薄く光る
WAT の行をクリック選択して緑で固定。ステータスバーの内容も固定され、REF↗ から命令リファレンスを開ける。セクションや関数の一覧行はクリックでその中へ移動
call / global の行をダブルクリック呼び出し先の関数、またはグローバル変数の定義へ移動
hex にホバーそのバイトが何に属するか(どの命令のどの部分か)をステータスバーに表示し、WAT の対応する行が光る
hex をクリックそのバイトを含む命令・エントリまで WAT で移動して選択
左のセクション / 関数にホバーその範囲全体を hex で表示
Shift + ホイールWAT を横スクロール(長い行用)

キーボード

?このヘルプ
GGOTO 欄へ。0x1a2b(16進オフセット)、#12(関数番号)、$main(関数名、前方一致)
/関数検索欄へ(Enter で先頭の候補を開く)
[ ]前 / 次の関数
Backspace / Alt+←戻る
TWAT と STATS を切り替え
S元ソースの行の表示を切り替え(DWARF があるときだけ)
L左パネルの表示を切り替え(狭い画面では既定で隠れ、重ねて表示)
Esc選択を解除 / 入力欄から抜ける / このヘルプを閉じる
WAT をクリックしてフォーカスしているとき
↑ ↓ PgUp PgDn Home End選択行を移動(hex も追従)
Enter選択行を開く(一覧なら中へ、call なら呼び出し先へ)
← →横スクロール

元ソースの表示(DWARF)

-g 付きでビルドした .wasm には、命令と元ソースの行の対応表(DWARF の .debug_line)が入っています。これがあると、関数の WAT の間に ;; sample.c:31 │ … のように元ソースの行が挟まります。

  • 行の中身まで出すには、.wasm を読み込んだ後に元のソースファイル(.c / .cpp / .rs など)をドロップします。ファイル名で照合します。複数まとめてドロップしても構いません。
  • SRC ボタンか S で表示を切り替えられます。
  • Emscripten なら -g、clang なら -g、Rust なら debug = true のビルドが対象です。リリースビルドは通常 DWARF を含みません。

セクション早見表

type関数の型(引数と戻り値の組み合わせ)の一覧
importJS(ホスト)側に用意してもらう関数・メモリ・テーブル・グローバル
functionモジュール内で定義する各関数が、どの型を使うか
table関数参照の表。C の関数ポインタは call_indirect でここを引く
memory線形メモリの初期サイズと最大サイズ(1 ページ = 64KiB)
globalグローバル変数。C のビルドではスタックポインタがここに入る
exportJS から呼べる関数などの一覧
startインスタンス化の直後に自動で呼ばれる関数
elementtable の初期値(関数ポインタの並び)
code各関数の本体(ローカル変数の宣言と命令列)
data線形メモリの初期内容。文字列リテラルや定数テーブル
custom実行には使われない付加情報。name(関数名)、producers(ビルドツール)、.debug_*(DWARF)など

表示の補足

  • i32.const 1024 ;; "PROTOCOL.LAIN" のように、data セグメントの中を指す定数には、その位置にある文字列(読めない場合は data[n]+offset)を表示します。
  • ステータスバーの op 1 + imm 2 は、その命令がオペコード 1 バイトと即値 2 バイトでできているという意味です。即値は LEB128 という可変長形式なので、値によって長さが変わります。
  • 関数名は name セクションから取ります。なければ import / export の名前を使い、それもなければ番号だけになります(リリースビルドの多くはこの状態です)。
  • STATS の機能判定は、全関数の命令をスキャンして実際に使われているオペコードから決めています。
  • 浮動小数点の定数は 10 進で表示します(wasm2wat は 16 進表記)。値は同じです。

未対応

  • GC proposal(0xFB 系の命令と再帰型)— その関数は途中まで表示します
  • Component Model 形式のファイル
  • DWARF は行番号の対応のみ(変数の位置や型情報は表示しません)

全命令の一覧は 命令リファレンス ↗