Utilia

WebAssembly disassembler

Teisenda .wasm binaarfail loetavaks WAT-tekstiks, valideeri see ja vaata sektsioone, importe, eksporte ja funktsioone brauseris, moodulit käivitamata.

Moodulit ainult loetakse ja teisendatakse tekstiks: seda ei kompileerita, ei instantseerita ega käivitata kunagi.

Kuidas WASM-i WAT-iks teisendada

  1. Lohista .wasm fail lohistusalale või klõpsa seda, et fail valida (kuni 20 MB). Samuti võid vajutada Laadi näidismoodul, et näha väikest demo.
  2. Tööriist kontrollib binaarfaili, valideerib selle ja näitab tulemust: ✓ Moodul on korrektne. või põhjust, miks see ei ole.
  3. Loe loendureid: Funktsioonid (imporditud ja defineeritud), Impordid, Ekspordid, Tüübid, Mälud, Tabelid ja Globaalsed muutujad.
  4. Loe disassembleeritud koodi jaotises WebAssembly tekstivorming (WAT), seejärel Kopeeri see või vajuta Laadi alla .wat.
  5. Kohanda väljundit valikutega: Kasuta nimesektsiooni nimesid, Voldutud avaldised (S-avaldised) ja Reasisesed ekspordid.
  6. Ava tabelid Sektsioonid, Impordid ja Ekspordid, et näha faili ülesehitust: iga sektsioon koos baidinihke, suuruse ja kirjete arvuga.

Moodulit ei kompileerita, ei instantseerita ega käivitata kunagi. Tööriist ainult loeb selle baite ja muudab need tekstiks, seega on ohutu uurida faili, mida sa ei usalda.

Mida WAT-väljund näitab

WebAssemblyl on kaks samaväärset vormingut: kompaktne binaarne .wasm, mille brauserid ja käituskeskkonnad laadivad, ning tekstivorming .wat, mis on mõeldud inimestele. Disassembler väljastab mooduli iga osa tekstikujul: funktsioonitüübid, impordid, funktsioonide kehad, tabelid, mälud, globaalsed muutujad, ekspordid, algusfunktsiooni, elemendisegmendid ja andmesegmendid.

Vaikimisi loetletakse käsud üks rea kohta pinu järjekorras, nii nagu need on salvestatud:

(func $add (param $a i32) (param $b i32) (result i32)
  local.get $a
  local.get $b
  i32.add)

Valikuga Voldutud avaldised (S-avaldised) pesastatakse operandid neid kasutava käsu sisse, nagu (i32.add (local.get $a) (local.get $b)), mida on sageli lihtsam jälgida. Reasisesed ekspordid kirjutab (export "add") funktsiooni sisse eraldi loendi asemel.

Nimed, silumisandmed ja valideerimine

.wasm fail viitab kõigele indeksi järgi. Kui kompilaator säilitas name kohandatud sektsiooni (tavaline silumisehitustes), näitab Kasuta nimesektsiooni nimesid algseid nimesid, näiteks $factorial. Muidu genereerib wabt nimed nagu $f2 või $t0, et tekst jääks loetavaks. Tootmisehitustest eemaldatakse nimed sageli, seega näitab minimeeritud moodul ainult genereeritud nimesid.

Valideerimine järgib WebAssembly spetsifikatsiooni: operandipinu tüübid peavad ühtima, indeksid peavad olemas olema jne. Vigane moodul disassembleeritakse siiski, kui selle struktuuri saab lugeda, koos kõrvalolevat valideerimisveaga, mis aitab kompilaatori või käsitsi kirjutatud binaarfaili silumisel. Post-MVP võimalused, nagu SIMD, lõimed, hulgimälutoimingud, viitetüübid, mitme väärtuse tagastus, sabakutsed, erandite käsitlus, memory64 ja prügikoristus, on lugemiseks lubatud.

See tööriist kasutab wabt.js-i, WebAssembly Binary Toolkiti (wasm2wat) JavaScripti versiooni. See laaditakse ainult siis, kui avad faili.

Korduma kippuvad küsimused

Kas saan algse C, C++ või Rusti lähtekoodi tagasi?

Ei. WAT on kompileeritud binaarfaili loetav vorm, mitte dekompilaator: lähtekood, kommentaarid ja enamik tüübiteavet kaovad kompileerimisel. Funktsioonide nimed säilivad ainult siis, kui nimesektsioon säilitati.

Kas minu fail laaditakse üles?

Ei. Faili loetakse ja disassembleeritakse sinu brauseris; midagi ei saadeta serverisse.

Miks ütleb tööriist, et fail ei ole WebAssembly binaarfail?

Iga moodul algab nelja baidiga \0asm, millele järgneb versioon 1. Fail, mida serveeritakse muu sisuga, gzipi või Brotliga pakitud fail või WebAssembly komponent (uuem komponendimudel) lükatakse tagasi.

Miks on tekstikast pooleli lõigatud?

Väga suured moodulid võivad anda miljoneid ridu. Tekstikast näitab esimest osa, et leht jääks reageerivaks; Laadi alla .wat salvestab täieliku teksti.

Kas saan moodulit siin käivitada või testida?

Ei. Moodulit ei instantseerita meelega kunagi, seega ei saa selle kood lehel käivituda. Testimiseks laadi see oma projekti või käituskeskkonda, näiteks wasmtime või Node.js.