Disassemblatore WebAssembly
Converti un binario .wasm in testo WAT leggibile, validalo ed elenca sezioni, import, export e funzioni nel browser, senza mai eseguire il modulo.
Il modulo viene solo letto e convertito in testo: non viene mai compilato, istanziato né eseguito.
- Dimensione
- –
- Funzioni
- –
- Import
- –
- Export
- –
- Tipi
- –
- Memorie
- –
- Tabelle
- –
- Globali
- –
Sezioni
| Sezione | Offset | Dimensione | Voci |
|---|
Import
| Modulo | Nome | Tipo | Dettagli |
|---|
Export
| Nome | Tipo | Indice |
|---|
Come convertire WASM in WAT
- Trascina un file
.wasmsull’area di caricamento oppure fai clic per sceglierlo (fino a 20 MB). Puoi anche premere Carica un modulo di esempio per vedere una piccola demo. - Lo strumento controlla il binario, lo valida e mostra l’esito: ✓ Il modulo è valido. oppure il motivo per cui non lo è.
- Leggi i contatori: Funzioni (importate e definite), Import, Export, Tipi, Memorie, Tabelle e Globali.
- Leggi il disassemblato in Formato testuale WebAssembly (WAT), poi premi Copia o Scarica .wat.
- Regola l’output con le opzioni Usa i nomi della sezione name, Espressioni annidate (S-expression) ed Export in linea.
- Apri le tabelle Sezioni, Import ed Export per vedere la struttura del file: ogni sezione con il suo offset in byte, la dimensione e il numero di voci.
Il modulo non viene mai compilato, istanziato o eseguito. Lo strumento ne legge solo i byte e li trasforma in testo, quindi puoi ispezionare senza rischi anche un file di cui non ti fidi.
Cosa mostra l’output WAT
WebAssembly ha due formati equivalenti: il binario compatto .wasm, che browser e runtime caricano, e il formato testuale .wat, pensato per le persone. Il disassemblatore stampa in forma testuale ogni parte del modulo: tipi delle funzioni, import, corpi delle funzioni, tabelle, memorie, globali, export, funzione di avvio, segmenti element e segmenti data.
Per impostazione predefinita le istruzioni sono elencate una per riga, nell’ordine dello stack, così come sono memorizzate:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Con Espressioni annidate (S-expression) gli operandi vengono inseriti dentro l’istruzione che li usa, come in (i32.add (local.get $a) (local.get $b)), una forma spesso più facile da seguire. Export in linea scrive (export "add") dentro la funzione invece che in un elenco separato.
Nomi, informazioni di debug e validazione
Un file .wasm fa riferimento a tutto tramite indici. Se il compilatore ha conservato una sezione personalizzata name (frequente nelle build di debug), Usa i nomi della sezione name mostra i nomi originali, come $factorial. Altrimenti wabt genera nomi come $f2 o $t0, così il testo resta leggibile. Le build di produzione vengono spesso private dei nomi, quindi un modulo minificato mostrerà solo nomi generati.
La validazione segue la specifica WebAssembly: i tipi sullo stack degli operandi devono corrispondere, gli indici devono esistere e così via. Un modulo non valido viene comunque disassemblato se la sua struttura è leggibile, con l’errore di validazione accanto: utile quando fai il debug di un compilatore o di un binario scritto a mano. Le funzionalità post-MVP come SIMD, thread, bulk memory, reference types, multi-value, tail call, gestione delle eccezioni, memory64 e garbage collection sono abilitate in lettura.
Lo strumento usa wabt.js, la build JavaScript del WebAssembly Binary Toolkit (wasm2wat), che viene caricata solo quando apri un file.
Domande frequenti
Posso recuperare il sorgente originale in C, C++ o Rust?
No. Il WAT è una forma leggibile del binario compilato, non un decompilatore: codice sorgente, commenti e gran parte delle informazioni sui tipi vanno persi con la compilazione. I nomi delle funzioni sopravvivono solo se la sezione name è stata conservata.
Il mio file viene caricato su un server?
No. Il file viene letto e disassemblato nel tuo browser; nulla viene inviato a un server.
Perché lo strumento dice che il file non è un binario WebAssembly?
Ogni modulo inizia con i quattro byte \0asm seguiti dalla versione 1. Un file con un contenuto diverso, compresso con gzip o Brotli, oppure un componente WebAssembly (il più recente component model) viene rifiutato.
Perché il riquadro di testo è tagliato?
I moduli molto grandi possono produrre milioni di righe. Il riquadro mostra solo la prima parte per mantenere la pagina reattiva; Scarica .wat salva il testo completo.
Posso eseguire o testare il modulo qui?
No. Il modulo non viene mai istanziato di proposito, quindi il suo codice non può girare nella pagina. Per provarlo, caricalo nel tuo progetto o in un runtime come wasmtime o Node.js.
Strumenti correlati
- AST Explorer JavaScript Incolla codice JavaScript ed esplora il suo albero sintattico astratto (ESTree, generato da Acorn) nel browser. Clicca sui nodi ed esporta l'AST in JSON.
- Generatore di hash Genera hash MD5, SHA-1, SHA-256 e SHA-512 di testi o file di qualsiasi dimensione e verifica i checksum. Tutto avviene nel tuo browser.
- Codifica e decodifica Base64 Codifica e decodifica Base64 gratis, con pieno supporto UTF-8 e opzione base64url sicura per URL. Funziona tutto nel browser, nulla viene caricato.