WASM u WAT disassembler
Pretvori .wasm binarnu datoteku u čitljiv WAT tekst, provjeri je i prikaži njene sekcije, uvoze, izvoze i funkcije u pregledniku, bez pokretanja modula.
Modul se samo čita i pretvara u tekst: nikada se ne kompajlira, ne instancira niti izvršava.
- Veličina
- –
- Funkcije
- –
- Uvozi
- –
- Izvozi
- –
- Tipovi
- –
- Memorije
- –
- Tabele
- –
- Globalne varijable
- –
Sekcije
| Sekcija | Pomak | Veličina | Stavke |
|---|
Uvozi
| Modul | Naziv | Vrsta | Detalji |
|---|
Izvozi
| Naziv | Vrsta | Indeks |
|---|
Kako pretvoriti WASM u WAT
- Prevuci datoteku
.wasmna zonu za spuštanje ili klikni na nju da je odabereš (do 20 MB). Možeš i pritisnuti Učitaj primjer modula da vidiš mali demo. - Alat provjerava binarnu datoteku, validira je i prikazuje rezultat: ✓ Modul je ispravan. ili razlog zašto nije.
- Pročitaj brojače: Funkcije (uvezene i definisane), Uvozi, Izvozi, Tipovi, Memorije, Tabele i Globalne varijable.
- Pročitaj disassembly u polju WebAssembly tekstualni format (WAT), pa ga Kopiraj ili pritisni Preuzmi .wat.
- Podesi izlaz opcijama: Koristi nazive iz sekcije name, Složeni izrazi (S-izrazi) i Ugrađeni izvozi.
- Otvori tabele Sekcije, Uvozi i Izvozi za raspored datoteke: svaka sekcija s pomakom u bajtovima, veličinom i brojem stavki.
Modul se nikada ne kompajlira, ne instancira niti izvršava. Alat samo čita njegove bajtove i pretvara ih u tekst, pa je sigurno pregledati datoteku kojoj ne vjeruješ.
Šta prikazuje WAT izlaz
WebAssembly ima dva ekvivalentna formata: kompaktni binarni .wasm koji učitavaju preglednici i runtime okruženja te tekstualni format .wat, namijenjen ljudima. Disassembler ispisuje svaki dio modula u tekstualnom obliku: tipove funkcija, uvoze, tijela funkcija, tabele, memorije, globalne varijable, izvoze, startnu funkciju, segmente elemenata i segmente podataka.
Po zadanom se instrukcije ispisuju jedna po redu, redoslijedom steka, onako kako su pohranjene:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Uz Složeni izrazi (S-izrazi) operandi se ugnježđuju unutar instrukcije koja ih koristi, kao u (i32.add (local.get $a) (local.get $b)), što je često lakše pratiti. Ugrađeni izvozi pišu (export "add") unutar funkcije umjesto u zasebnoj listi.
Nazivi, informacije za otklanjanje grešaka i validacija
Datoteka .wasm se na sve poziva indeksima. Kada je kompajler zadržao prilagođenu sekciju name (uobičajeno u debug izgradnjama), Koristi nazive iz sekcije name prikazuje izvorne nazive poput $factorial. Inače wabt generiše nazive poput $f2 ili $t0 da tekst ostane čitljiv. Produkcijske izgradnje često nemaju nazive, pa minifikovan modul prikazuje samo generisane nazive.
Validacija prati WebAssembly specifikaciju: tipovi na steku operanada moraju se podudarati, indeksi moraju postojati i slično. Neispravan modul se i dalje disassemblira kada se njegova struktura može pročitati, uz grešku validacije pored, što pomaže pri otklanjanju grešaka u kompajleru ili ručno pisanoj binarnoj datoteci. Mogućnosti nakon MVP-a, poput SIMD-a, niti, masovnih operacija s memorijom, tipova referenci, više povratnih vrijednosti, tail poziva, obrade izuzetaka, memory64 i garbage collectiona, uključene su za čitanje.
Alat koristi wabt.js, JavaScript izgradnju WebAssembly Binary Toolkita (wasm2wat). Učitava se tek kada otvoriš datoteku.
Česta pitanja
Mogu li dobiti nazad izvorni C, C++ ili Rust kod?
Ne. WAT je čitljiv oblik kompajlirane binarne datoteke, a ne dekompajler: izvorni kod, komentari i većina informacija o tipovima nestaju nakon kompajliranja. Nazivi funkcija preživljavaju samo ako je sekcija name zadržana.
Šalje li se moja datoteka na server?
Ne. Datoteka se čita i disassemblira u tvom pregledniku; ništa se ne šalje na server.
Zašto alat kaže da datoteka nije WebAssembly binarna datoteka?
Svaki modul počinje s četiri bajta \0asm, iza kojih slijedi verzija 1. Datoteka s drugačijim sadržajem, komprimovana pomoću gzipa ili Brotlija, ili WebAssembly komponenta (noviji model komponenti) bit će odbijena.
Zašto je tekstualno polje skraćeno?
Veoma veliki moduli mogu proizvesti milione redova. Tekstualno polje prikazuje prvi dio da stranica ostane responzivna; Preuzmi .wat čuva cijeli tekst.
Mogu li ovdje pokrenuti ili testirati modul?
Ne. Modul se namjerno nikada ne instancira, pa se njegov kod ne može izvršiti na stranici. Za testiranje ga učitaj u vlastiti projekat ili runtime poput wasmtimea ili Node.js-a.
Srodni alati
- Istraživač JavaScript AST-a Zalijepi JavaScript i istraži njegovo apstraktno sintaksno stablo (ESTree, Acorn) u pregledniku. Klikni čvorove i izvezi AST kao JSON.
- Generator hasheva Generiši MD5, SHA-1, SHA-256 i SHA-512 heševe teksta ili datoteka bilo koje veličine i provjeri kontrolne zbirove. Sve radi u tvom pregledniku.
- Base64 koder i dekoder Besplatan Base64 koder i dekoder s punom podrškom za UTF-8 i opcijom base64url. Radi u pregledniku, ništa se ne šalje na server.