WebAssembly-disassembler
Konverter en .wasm-binærfil til lesbar WAT-tekst, valider den og list opp seksjoner, importer, eksporter og funksjoner, i nettleseren din uten å kjøre modulen.
Modulen blir bare lest og konvertert til tekst: den blir aldri kompilert, instansiert eller kjørt.
- Størrelse
- –
- Funksjoner
- –
- Importer
- –
- Eksporter
- –
- Typer
- –
- Minner
- –
- Tabeller
- –
- Globale variabler
- –
Seksjoner
| Seksjon | Forskyvning | Størrelse | Oppføringer |
|---|
Importer
| Modul | Navn | Slag | Detaljer |
|---|
Eksporter
| Navn | Slag | Indeks |
|---|
Slik konverterer du WASM til WAT
- Slipp en
.wasm-fil på slippsonen, eller klikk på den for å velge en (opptil 20 MB). Du kan også trykke Last inn en eksempelmodul for å se en liten demo. - Verktøyet sjekker binærfilen, validerer den og viser resultatet: ✓ Modulen er gyldig., eller grunnen til at den ikke er det.
- Les tellerne: Funksjoner (importerte og definerte), Importer, Eksporter, Typer, Minner, Tabeller og Globale variabler.
- Les disassembleringen i WebAssembly-tekstformat (WAT), og Kopier den eller trykk Last ned .wat.
- Juster utdataen med valgene: Bruk navn fra navnedelen (name section), Foldede uttrykk (S-uttrykk) og Innebygde eksporter.
- Åpne tabellene Seksjoner, Importer og Eksporter for å se oppbyggingen av filen: hver seksjon med byteforskyvning, størrelse og antall oppføringer.
Modulen blir aldri kompilert, instansiert eller kjørt. Verktøyet leser bare byte-ene og gjør dem om til tekst, så det er trygt å inspisere en fil du ikke stoler på.
Hva WAT-utdataen viser
WebAssembly har to likeverdige formater: den kompakte binærfilen .wasm som nettlesere og kjøremiljøer laster, og tekstformatet .wat, som er ment for mennesker. Disassembleren skriver ut alle deler av modulen som tekst: funksjonstyper, importer, funksjonskropper, tabeller, minner, globale variabler, eksporter, startfunksjonen, elementsegmenter og datasegmenter.
Som standard listes instruksjonene én per linje i stakkrekkefølge, slik de er lagret:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Med Foldede uttrykk (S-uttrykk) nestes operandene inni instruksjonen som bruker dem, som i (i32.add (local.get $a) (local.get $b)), noe som ofte er lettere å følge. Innebygde eksporter skriver (export "add") inni funksjonen i stedet for i en egen liste.
Navn, feilsøkingsinformasjon og validering
En .wasm-fil refererer til alt med indeks. Når kompilatoren har beholdt en egendefinert name-seksjon (vanlig i feilsøkingsbygg), viser Bruk navn fra navnedelen (name section) de opprinnelige navnene som $factorial. Ellers lager wabt navn som $f2 eller $t0, slik at teksten forblir lesbar. Produksjonsbygg har ofte fått navnene fjernet, så en minifisert modul viser bare genererte navn.
Valideringen følger WebAssembly-spesifikasjonen: typene må stemme på operandstakken, indeksene må finnes, og så videre. En ugyldig modul blir likevel disassemblert når strukturen kan leses, med valideringsfeilen ved siden av, noe som hjelper når du feilsøker en kompilator eller en håndskrevet binærfil. Funksjoner etter MVP, som SIMD, tråder, bulk-minne, referansetyper, flere returverdier, haleanrop, unntakshåndtering, memory64 og søppelhåndtering (garbage collection), er slått på for lesing.
Verktøyet bruker wabt.js, JavaScript-versjonen av WebAssembly Binary Toolkit (wasm2wat). Det lastes først når du åpner en fil.
Ofte stilte spørsmål
Kan jeg få tilbake den opprinnelige C-, C++- eller Rust-kildekoden?
Nei. WAT er en lesbar form av den kompilerte binærfilen, ikke en dekompilator: kildekoden, kommentarene og det meste av typeinformasjonen er borte etter kompilering. Funksjonsnavn overlever bare når navnedelen er beholdt.
Blir filen min lastet opp?
Nei. Filen leses og disassembleres i nettleseren din. Ingenting sendes til en server.
Hvorfor sier verktøyet at filen ikke er en WebAssembly-binærfil?
Hver modul begynner med de fire byte-ene \0asm etterfulgt av versjon 1. En fil som serveres med annet innhold, er komprimert med gzip eller Brotli, eller er en WebAssembly-komponent (den nyere komponentmodellen), blir avvist.
Hvorfor er tekstboksen avkortet?
Svært store moduler kan gi millioner av linjer. Tekstboksen viser den første delen for at siden skal være responsiv. Last ned .wat lagrer hele teksten.
Kan jeg kjøre eller teste modulen her?
Nei. Modulen blir med vilje aldri instansiert, så koden kan ikke kjøre på siden. For å teste den laster du den inn i ditt eget prosjekt eller i et kjøremiljø som wasmtime eller Node.js.
Relaterte verktøy
- JavaScript AST-utforsker Lim inn JavaScript og utforsk det abstrakte syntakstreet (ESTree, analysert med Acorn) i nettleseren din. Klikk på noder, se koden og eksporter AST som JSON.
- Hash-generator Lag MD5-, SHA-1-, SHA-256- og SHA-512-hasher av tekst eller filer i alle størrelser, og kontroller sjekksummer. Alt kjører i nettleseren din.
- Base64-koder og -dekoder Gratis Base64-koder og -dekoder med full UTF-8-støtte og valg for URL-trygg base64url. Kjører helt i nettleseren din, ingenting lastes opp.