.wasmバイナリは直接読むためのものではありませんが、WebAssemblyの読みやすいテキスト形式であるWATに変換し、命令の流れを超えて構造的に解析することができます。WASM デコンパイラーはその両方をブラウザ内だけで行います。
このツールが何であり、何でないかをはっきりさせておきます。 このツールは元のRust、C、C++のソースコードを復元するものではありません — その情報はコンパイラがWASMを生成した時点で失われています。正確に復元できるのは次のものです。
- 完全なWAT逆アセンブル —
wabt(WebAssembly Binary Toolkit)によって生成され、モジュールに"name"セクションがある場合はデバッグ名が適用されます。 - 呼び出しグラフ — WATテキストから推測するのではなく、各関数の実際のバイトコードを走査して
callとcall_indirect命令を見つけて構築します。call_indirectはどの関数型シグネチャを対象とするかを示しますが、推測した具体的な関数は決して示しません。実際の呼び出し先は実行時にしか解決されないためです — これはこのツールの限界ではなく、コードの構造的な事実です。 - 関数ごとの制御フローの形状 — block/loop/ifの最大ネスト深度とそれぞれの数を示し、完全な制御フローグラフを必要とせずに関数の構造的な複雑さをおおまかに把握できます。
- 根拠に基づくベストエフォートのツールチェーン推定 — 「Rustの可能性が高い」「Emscripten(C/C++)の可能性が高い」「AssemblyScriptの可能性が高い」など、実際に検証可能な根拠に基づきます:Rustのマングルされたシンボルの接頭辞、Emscripten特有のランタイムインポート(
emscripten_*、__cxa_*、__wasm_call_ctors)、あるいはモジュールのデータセグメントに見つかるAssemblyScriptの標準ライブラリパス文字列~lib/などです。ツールは常に見つかった具体的な根拠を示し、結果を「可能性が高い」と表現します — 断定することも、根拠のない推測をすることもありません。
このツールがモデル化しているオペコード範囲外の命令(SIMD、アトミック、バルクメモリ操作など)を使う関数は、黙って完全なものとして表示するのではなく、「部分的な逆アセンブル」としてマークされます — 整った結果よりも、解析の限界について正直であることを重視しています。
サードパーティの.wasmモジュールの構造を監査したり、関数同士がどう呼び合っているかを理解したり、より深い解析の前に見知らぬバイナリを最初に読み解いたりするのに役立ちます。
Tiny Online Tools







