WebAssembly-Disassembler
WASM in WAT umwandeln: .wasm-Datei in lesbaren Text übersetzen, validieren und Sections, Importe, Exporte und Funktionen auflisten, ohne Ausführung.
Das Modul wird nur gelesen und in Text umgewandelt: Es wird nie kompiliert, instanziiert oder ausgeführt.
- Größe
- –
- Funktionen
- –
- Importe
- –
- Exporte
- –
- Typen
- –
- Speicher
- –
- Tabellen
- –
- Globale Variablen
- –
Sections
| Section | Offset | Größe | Einträge |
|---|
Importe
| Modul | Name | Art | Details |
|---|
Exporte
| Name | Art | Index |
|---|
So wandeln Sie WASM in WAT um
- Ziehen Sie eine
.wasm-Datei auf die Ablagefläche oder klicken Sie darauf, um eine Datei auszuwählen (bis 20 MB). Mit „Beispielmodul laden“ sehen Sie eine kleine Demo. - Das Tool prüft die Binärdatei, validiert sie und zeigt das Ergebnis: „✓ Das Modul ist gültig.“ oder den Grund, warum es das nicht ist.
- Lesen Sie die Zähler ab: „Funktionen“ (importiert und definiert), „Importe“, „Exporte“, „Typen“, „Speicher“, „Tabellen“ und „Globale Variablen“.
- Lesen Sie die Disassemblierung im Bereich „WebAssembly-Textformat (WAT)“ und übernehmen Sie sie mit „Kopieren“ oder speichern Sie sie mit „.wat herunterladen“.
- Passen Sie die Ausgabe mit den Optionen an: „Namen aus der Name-Section verwenden“, „Verschachtelte Ausdrücke (S-Expressions)“ und „Exporte inline“.
- Öffnen Sie die Tabellen „Sections“, „Importe“ und „Exporte“, um den Aufbau der Datei zu sehen: jede Section mit Byte-Offset, Größe und Anzahl der Einträge.
Das Modul wird nie kompiliert, instanziiert oder ausgeführt. Das Tool liest nur seine Bytes und wandelt sie in Text um. Sie können also gefahrlos auch Dateien untersuchen, denen Sie nicht vertrauen.
Was die WAT-Ausgabe zeigt
WebAssembly kennt zwei gleichwertige Formate: das kompakte Binärformat .wasm, das Browser und Laufzeitumgebungen laden, und das Textformat .wat, das für Menschen gedacht ist. Der Disassembler gibt jeden Teil des Moduls als Text aus: Funktionstypen, Importe, Funktionsrümpfe, Tabellen, Speicher, globale Variablen, Exporte, die Startfunktion, Element- und Datensegmente.
Standardmäßig stehen die Instruktionen eine pro Zeile in Stack-Reihenfolge, so wie sie gespeichert sind:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Mit „Verschachtelte Ausdrücke (S-Expressions)“ werden die Operanden in die Instruktion geschachtelt, die sie verwendet, etwa (i32.add (local.get $a) (local.get $b)) – das ist oft leichter nachzuvollziehen. „Exporte inline“ schreibt (export "add") direkt in die Funktion statt in eine separate Liste.
Namen, Debug-Informationen und Validierung
Eine .wasm-Datei verweist auf alles per Index. Hat der Compiler eine benutzerdefinierte name-Section behalten (typisch für Debug-Builds), zeigt „Namen aus der Name-Section verwenden“ die ursprünglichen Namen wie $factorial. Andernfalls erzeugt wabt Namen wie $f2 oder $t0, damit der Text lesbar bleibt. Produktions-Builds werden oft ohne Namen ausgeliefert; ein minimiertes Modul zeigt daher nur generierte Namen.
Die Validierung folgt der WebAssembly-Spezifikation: Die Typen auf dem Operanden-Stack müssen passen, Indizes müssen existieren und so weiter. Ein ungültiges Modul wird trotzdem disassembliert, sofern seine Struktur lesbar ist, und der Validierungsfehler steht daneben – hilfreich beim Debuggen eines Compilers oder einer von Hand erstellten Binärdatei. Post-MVP-Funktionen wie SIMD, Threads, Bulk Memory, Referenztypen, Multi-Value, Tail Calls, Exception Handling, memory64 und Garbage Collection sind zum Lesen aktiviert.
Das Tool verwendet wabt.js, den JavaScript-Build des WebAssembly Binary Toolkit (wasm2wat). Er wird erst geladen, wenn Sie eine Datei öffnen.
Häufige Fragen
Kann ich den ursprünglichen C-, C++- oder Rust-Quellcode zurückgewinnen?
Nein. WAT ist eine lesbare Form der kompilierten Binärdatei, kein Decompiler: Quellcode, Kommentare und die meisten Typinformationen gehen beim Kompilieren verloren. Funktionsnamen bleiben nur erhalten, wenn die Name-Section behalten wurde.
Wird meine Datei hochgeladen?
Nein. Die Datei wird in Ihrem Browser gelesen und disassembliert; nichts wird an einen Server gesendet.
Warum meldet das Tool, die Datei sei keine WebAssembly-Binärdatei?
Jedes Modul beginnt mit den vier Bytes \0asm, gefolgt von Version 1. Eine Datei mit anderem Inhalt, eine mit gzip oder Brotli komprimierte Datei oder eine WebAssembly-Komponente (das neuere Component Model) wird abgelehnt.
Warum ist das Textfeld abgeschnitten?
Sehr große Module können Millionen Zeilen erzeugen. Das Textfeld zeigt nur den ersten Teil, damit die Seite flüssig bleibt; „.wat herunterladen“ speichert den vollständigen Text.
Kann ich das Modul hier ausführen oder testen?
Nein. Das Modul wird absichtlich nie instanziiert, sein Code kann in der Seite also nicht laufen. Zum Testen laden Sie es in Ihr eigenes Projekt oder in eine Laufzeitumgebung wie wasmtime oder Node.js.
Ähnliche Tools
- JavaScript-AST-Explorer JavaScript einfügen und den abstrakten Syntaxbaum (ESTree, geparst mit Acorn) im Browser erkunden: Knoten anklicken, Code sehen, AST als JSON exportieren.
- Hash-Generator MD5-, SHA-1-, SHA-256- und SHA-512-Hashes von Text oder Dateien beliebiger Größe erzeugen und Prüfsummen vergleichen – alles lokal im Browser.
- Base64 kodieren und dekodieren Kostenloser Base64-Encoder und -Decoder mit voller UTF-8-Unterstützung und URL-sicherer base64url-Option. Läuft komplett im Browser, nichts wird hochgeladen.