Dezasamblor WebAssembly
Convertește un binar .wasm în text WAT lizibil, validează-l și listează secțiunile, importurile, exporturile și funcțiile, în browser, fără a rula modulul.
Modulul este doar citit și convertit în text: nu este niciodată compilat, instanțiat sau rulat.
- Dimensiune
- –
- Funcții
- –
- Importuri
- –
- Exporturi
- –
- Tipuri
- –
- Memorii
- –
- Tabele
- –
- Globale
- –
Secțiuni
| Secțiune | Deplasare | Dimensiune | Intrări |
|---|
Importuri
| Modul | Nume | Fel | Detalii |
|---|
Exporturi
| Nume | Fel | Index |
|---|
Cum convertești WASM în WAT
- Trage un fișier
.wasmîn zona de tragere sau fă clic pe ea ca să alegi unul (până la 20 MB). Poți apăsa și Încarcă un modul de exemplu ca să vezi o mică demonstrație. - Instrumentul verifică binarul, îl validează și arată rezultatul: ✓ Modulul este valid. sau motivul pentru care nu este.
- Citește contoarele: Funcții (importate și definite), Importuri, Exporturi, Tipuri, Memorii, Tabele și Globale.
- Citește dezasamblarea în Format text WebAssembly (WAT), apoi Copiază-o sau apasă Descarcă .wat.
- Ajustează rezultatul cu opțiunile: Folosește numele din secțiunea name, Expresii pliate (S-expresii) și Exporturi inline.
- Deschide tabelele Secțiuni, Importuri și Exporturi pentru structura fișierului: fiecare secțiune cu deplasarea în octeți, dimensiunea și numărul de intrări.
Modulul nu este niciodată compilat, instanțiat sau rulat. Instrumentul doar îi citește octeții și îi transformă în text, deci este sigur să inspectezi un fișier în care nu ai încredere.
Ce arată rezultatul WAT
WebAssembly are două formate echivalente: binarul compact .wasm, pe care îl încarcă browserele și mediile de execuție, și formatul text .wat, destinat oamenilor. Dezasamblorul afișează fiecare parte a modulului în formă text: tipurile funcțiilor, importurile, corpurile funcțiilor, tabelele, memoriile, globalele, exporturile, funcția de pornire, segmentele de elemente și segmentele de date.
Implicit, instrucțiunile sunt listate câte una pe linie, în ordinea stivei, așa cum sunt stocate:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Cu Expresii pliate (S-expresii), operanzii sunt imbricați în instrucțiunea care îi folosește, ca în (i32.add (local.get $a) (local.get $b)), ceea ce este adesea mai ușor de urmărit. Exporturi inline scrie (export "add") în interiorul funcției, în loc de o listă separată.
Nume, informații de depanare și validare
Un fișier .wasm se referă la tot prin index. Când compilatorul a păstrat o secțiune personalizată name (frecventă în build-urile de depanare), Folosește numele din secțiunea name arată numele originale, precum $factorial. Altfel, wabt generează nume precum $f2 sau $t0, ca textul să rămână lizibil. Build-urile de producție sunt adesea fără nume, deci un modul minificat va arăta doar nume generate.
Validarea urmează specificația WebAssembly: tipurile trebuie să se potrivească pe stiva de operanzi, indecșii trebuie să existe și așa mai departe. Un modul invalid este totuși dezasamblat atunci când structura lui poate fi citită, cu eroarea de validare alături, ceea ce ajută la depanarea unui compilator sau a unui binar scris de mână. Funcțiile post-MVP precum SIMD, threads, bulk memory, reference types, multi-value, tail calls, exception handling, memory64 și garbage collection sunt activate pentru citire.
Instrumentul folosește wabt.js, varianta JavaScript a WebAssembly Binary Toolkit (wasm2wat). Este încărcat doar când deschizi un fișier.
Întrebări frecvente
Pot recupera codul sursă original C, C++ sau Rust?
Nu. WAT este o formă lizibilă a binarului compilat, nu un decompilator: codul sursă, comentariile și majoritatea informațiilor de tip dispar după compilare. Numele funcțiilor supraviețuiesc doar dacă secțiunea name a fost păstrată.
Este fișierul meu încărcat?
Nu. Fișierul este citit și dezasamblat în browserul tău; nu se trimite nimic unui server.
De ce spune instrumentul că fișierul nu este un binar WebAssembly?
Fiecare modul începe cu cei patru octeți \0asm, urmați de versiunea 1. Un fișier servit cu alt conținut, comprimat cu gzip sau Brotli, sau o componentă WebAssembly (noul model de componente) va fi respins.
De ce este caseta de text tăiată?
Modulele foarte mari pot produce milioane de linii. Caseta de text arată prima parte ca pagina să rămână receptivă; Descarcă .wat salvează textul complet.
Pot rula sau testa modulul aici?
Nu. Modulul nu este instanțiat niciodată, intenționat, deci codul lui nu poate rula în pagină. Ca să îl testezi, încarcă-l în propriul proiect sau într-un mediu de execuție precum wasmtime ori Node.js.
Instrumente similare
- Explorator AST JavaScript Lipește cod JavaScript și explorează arborele sintactic abstract (ESTree, analizat cu Acorn) în browser. Fă clic pe noduri și exportă AST-ul ca JSON.
- Generator de hash Generează hash-uri MD5, SHA-1, SHA-256 și SHA-512 pentru text sau fișiere de orice dimensiune și verifică sumele de control. Totul rulează în browser.
- Codificare și decodificare Base64 Codifică și decodifică Base64 gratuit, cu suport complet UTF-8 și opțiunea base64url pentru URL. Funcționează în browser, nimic nu este încărcat.