Disassembler WebAssembly
Pretvori dvojiško datoteko .wasm v berljivo besedilo WAT, jo preveri in naštej njene razdelke, uvoze, izvoze in funkcije v brskalniku, ne da bi modul zagnal.
Modul se samo prebere in pretvori v besedilo: nikoli se ne prevede, instancira ali zažene.
- Velikost
- –
- Funkcije
- –
- Uvozi
- –
- Izvozi
- –
- Tipi
- –
- Pomnilniki
- –
- Tabele
- –
- Globalne spremenljivke
- –
Razdelki
| Razdelek | Odmik | Velikost | Vnosi |
|---|
Uvozi
| Modul | Ime | Vrsta | Podrobnosti |
|---|
Izvozi
| Ime | Vrsta | Indeks |
|---|
Kako pretvoriti WASM v WAT
- Datoteko
.wasmspusti na območje za spuščanje ali klikni nanj in jo izberi (do 20 MB). Pritisneš lahko tudi Naloži vzorčni modul, da vidiš majhen primer. - Orodje preveri dvojiško datoteko, jo validira in pokaže rezultat: ✓ Modul je veljaven. ali razlog, zakaj ni.
- Preberi števce: Funkcije (uvožene in definirane), Uvozi, Izvozi, Tipi, Pomnilniki, Tabele in Globalne spremenljivke.
- Disassemblirano kodo preberi v Besedilna oblika WebAssembly (WAT), nato jo Kopiraj ali pritisni Prenesi .wat.
- Izhod prilagodi z možnostmi: Uporabi imena iz razdelka name, Zložani izrazi (izrazi S) in Vrstični izvozi.
- Odpri tabele Razdelki, Uvozi in Izvozi za zgradbo datoteke: vsak razdelek z odmikom bajtov, velikostjo in številom vnosov.
Modul se nikoli ne prevede, instancira ali zažene. Orodje samo prebere njegove bajte in jih spremeni v besedilo, zato je varno pregledovati datoteko, ki ji ne zaupaš.
Kaj prikaže izhod WAT
WebAssembly ima dve enakovredni obliki: kompaktno dvojiško .wasm, ki jo nalagajo brskalniki in izvajalna okolja, ter besedilno obliko .wat, namenjeno ljudem. Disassembler izpiše vsak del modula v besedilni obliki: tipe funkcij, uvoze, telesa funkcij, tabele, pomnilnike, globalne spremenljivke, izvoze, začetno funkcijo, segmente elementov in segmente podatkov.
Privzeto so ukazi navedeni po eden v vrstici v vrstnem redu sklada, tako kot so shranjeni:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Z Zložani izrazi (izrazi S) so operandi gnezdeni znotraj ukaza, ki jih uporablja, kot v (i32.add (local.get $a) (local.get $b)), kar je pogosto lažje slediti. Vrstični izvozi zapišejo (export "add") znotraj funkcije namesto na ločenem seznamu.
Imena, informacije za razhroščevanje in validacija
Datoteka .wasm se na vse sklicuje z indeksi. Kadar je prevajalnik ohranil razdelek po meri name (pogosto pri razhroščevalnih izdajah), Uporabi imena iz razdelka name pokaže izvirna imena, kot je $factorial. Sicer wabt ustvari imena, kot sta $f2 ali $t0, da besedilo ostane berljivo. Produkcijske izdaje so pogosto brez imen, zato bo pomanjšan modul kazal samo ustvarjena imena.
Validacija sledi specifikaciji WebAssembly: tipi se morajo ujemati na skladu operandov, indeksi morajo obstajati in tako naprej. Neveljaven modul je še vedno disassembliran, če je njegovo zgradbo mogoče prebrati, z napako validacije ob njem, kar pomaga pri razhroščevanju prevajalnika ali ročno napisane dvojiške datoteke. Funkcije po MVP, kot so SIMD, niti, množični pomnilnik, tipi referenc, več vrednosti, repni klici, obravnava izjem, memory64 in zbiranje smeti, so za branje omogočene.
To orodje uporablja wabt.js, JavaScript različico orodjarne WebAssembly Binary Toolkit (wasm2wat). Naloži se šele, ko odpreš datoteko.
Pogosta vprašanja
Ali lahko dobim nazaj izvirno kodo C, C++ ali Rust?
Ne. WAT je berljiva oblika prevedene dvojiške datoteke, ne dekompilator: izvorna koda, komentarji in večina podatkov o tipih so po prevajanju izgubljeni. Imena funkcij preživijo samo, če je bil razdelek name ohranjen.
Ali se moja datoteka naloži na strežnik?
Ne. Datoteka se prebere in disassemblira v tvojem brskalniku; nič se ne pošlje na strežnik.
Zakaj orodje pravi, da datoteka ni dvojiška datoteka WebAssembly?
Vsak modul se začne s štirimi bajti \0asm, ki jim sledi različica 1. Datoteka z drugo vsebino, stisnjena z gzip ali Brotli, ali komponenta WebAssembly (novejši model komponent) bo zavrnjena.
Zakaj je besedilno polje odrezano?
Zelo veliki moduli lahko dajo milijone vrstic. Besedilno polje kaže prvi del, da stran ostane odzivna; Prenesi .wat shrani celotno besedilo.
Ali lahko modul tu zaženem ali preizkusim?
Ne. Modul se namenoma nikoli ne instancira, zato se njegova koda na strani ne more izvesti. Za preizkus ga naloži v svoj projekt ali izvajalno okolje, kot sta wasmtime ali Node.js.
Sorodna orodja
- Raziskovalec AST za JavaScript Prilepi kodo JavaScript in v brskalniku razišči abstraktno sintaksno drevo (ESTree, Acorn). Klikaj vozlišča in izvozi AST kot JSON.
- Generator zgoščenih vrednosti (hash) Ustvari zgoščene vrednosti MD5, SHA-1, SHA-256 in SHA-512 za besedilo ali datoteke poljubne velikosti in preveri kontrolne vsote. Deluje v brskalniku.
- Base64 kodirnik in dekodirnik Brezplačno kodiranje in dekodiranje Base64 s polno podporo za UTF-8 in možnostjo base64url. Deluje v brskalniku, nič se ne naloži na strežnik.