Teknobench

WASM għal WAT – Diżassembler ta’ WebAssembly

Ikkonverti binarju .wasm f’test WAT li jinqara, ivvalidah u elenka t-taqsimiet, l-importazzjonijiet u l-esportazzjonijiet, fil-brawżer mingħajr ma tħaddmu.

Il-modulu jinqara biss u jinbidel f’test: qatt ma jiġi kkompilat, istanzjat jew imħaddem.

Kif tikkonverti WASM għal WAT

  1. Waqqa’ fajl .wasm fiż-żona tat-twaqqigħ, jew ikklikkja fuqha biex tagħżel wieħed (sa 20 MB). Tista’ wkoll tagħfas Tella’ modulu ta’ eżempju biex tara demo żgħir.
  2. L-għodda tiċċekkja l-binarju, tivvalidah u turi r-riżultat: ✓ Il-modulu huwa validu., jew ir-raġuni għaliex mhuwiex.
  3. Aqra l-kontaturi: Funzjonijiet (importati u definiti), Importazzjonijiet, Esportazzjonijiet, Tipi, Memorji, Tabelli u Globali.
  4. Aqra d-diżassemblar f’Format tat-test WebAssembly (WAT), imbagħad Ikkopja jew agħfas Niżżel .wat.
  5. Aġġusta l-output bl-għażliet: Uża l-ismijiet mit-taqsima name, Espressjonijiet mitwija (S-expressions) u Esportazzjonijiet inline.
  6. Iftaħ it-tabelli Taqsimiet, Importazzjonijiet u Esportazzjonijiet għal-layout tal-fajl: kull taqsima bl-offset tal-byte, id-daqs u n-numru ta’ entrati.

Il-modulu qatt ma jiġi kkompilat, istanzjat jew imħaddem. L-għodda taqra biss il-bytes tiegħu u tibdilhom f’test, għalhekk huwa sigur li tispezzjona fajl li ma tafdax.

X’juri l-output WAT

WebAssembly għandu żewġ formati ekwivalenti: il-binarju kompatt .wasm li l-brawżers u r-runtimes jgħabbu, u l-format tat-test .wat, li huwa maħsub għall-bnedmin. Id-diżassembler jipprintja kull parti tal-modulu f’forma ta’ test: tipi ta’ funzjonijiet, importazzjonijiet, korpi tal-funzjonijiet, tabelli, memorji, globali, esportazzjonijiet, il-funzjoni start, segmenti ta’ elementi u segmenti ta’ data.

B’default, l-istruzzjonijiet jiġu elenkati waħda f’kull linja f’ordni tal-istack, kif jinħażnu:

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

B’Espressjonijiet mitwija (S-expressions), l-operandi jitqiegħdu ġewwa l-istruzzjoni li tużahom, bħal (i32.add (local.get $a) (local.get $b)), li spiss huwa aktar faċli biex jiġi segwit. Esportazzjonijiet inline jikteb (export "add") ġewwa l-funzjoni minflok f’lista separata.

Ismijiet, informazzjoni ta’ debug u validazzjoni

Fajl .wasm jirreferi għal kollox b’indiċi. Meta l-kompilatur żamm taqsima personalizzata name (komuni fil-builds ta’ debug), Uża l-ismijiet mit-taqsima name juri l-ismijiet oriġinali bħal $factorial. Inkella wabt jiġġenera ismijiet bħal $f2 jew $t0 biex it-test jibqa’ jinqara. Il-builds tal-produzzjoni spiss jitneħħew minnhom l-ismijiet, għalhekk modulu minifikat jurik biss ismijiet iġġenerati.

Il-validazzjoni ssegwi l-ispeċifikazzjoni WebAssembly: it-tipi jridu jaqblu fuq l-istack tal-operandi, l-indiċijiet iridu jeżistu, eċċ. Modulu invalidu xorta jiġi diżassemblat meta l-istruttura tiegħu tkun tista’ tinqara, bl-iżball tal-validazzjoni ħdejh, li jgħin meta tiddibaggja kompilatur jew binarju miktub bl-idejn. Karatteristiċi post-MVP bħal SIMD, threads, bulk memory, reference types, multi-value, tail calls, exception handling, memory64 u garbage collection huma attivati għall-qari.

L-għodda tuża wabt.js, il-bini JavaScript tal-WebAssembly Binary Toolkit (wasm2wat). Titgħabba biss meta tiftaħ fajl.

Mistoqsijiet frekwenti

Nista’ nikseb lura s-sors oriġinali ta’ C, C++ jew Rust?

Le. WAT huwa forma li tinqara tal-binarju kkompilat, mhux dekompilatur: is-sors, il-kummenti u l-biċċa l-kbira tal-informazzjoni tat-tipi jisparixxu wara l-kompilazzjoni. L-ismijiet tal-funzjonijiet jibqgħu biss meta nżammet it-taqsima name.

Il-fajl tiegħi jittella’?

Le. Il-fajl jinqara u jiġi diżassemblat fil-brawżer tiegħek; xejn ma jintbagħat lil server.

Għaliex l-għodda tgħid li l-fajl mhuwiex binarju WebAssembly?

Kull modulu jibda bl-erba’ bytes \0asm segwiti mill-verżjoni 1. Fajl servut b’kontenut differenti, ikkompressat b’gzip jew Brotli, jew komponent WebAssembly (il-mudell il-ġdid tal-komponenti) jiġi rrifjutat.

Għaliex il-kaxxa tat-test hija maqtugħa?

Moduli kbar ħafna jistgħu jipproduċu miljuni ta’ linji. Il-kaxxa tat-test turi l-ewwel parti biex il-paġna tibqa’ responsiva; Niżżel .wat isejvja t-test sħiħ.

Nista’ nħaddem jew nittestja l-modulu hawn?

Le. Il-modulu qatt ma jiġi istanzjat apposta, għalhekk il-kodiċi tiegħu ma jistax jaħdem fil-paġna. Biex tittestjah, għabbih fil-proġett tiegħek stess jew f’runtime bħal wasmtime jew Node.js.