Utilia

Çmontues WebAssembly

Konverto një binar .wasm në tekst WAT të lexueshëm, validoje dhe liston seksionet, importet, eksportet dhe funksionet e tij, në shfletues pa ekzekutuar modulin.

Moduli vetëm lexohet dhe kthehet në tekst: nuk kompilohet, nuk instancohet dhe nuk ekzekutohet kurrë.

Si ta konvertosh WASM në WAT

  1. Hiq një skedar .wasm në zonën e lëshimit, ose kliko mbi të për të zgjedhur një (deri në 20 MB). Mund të shtypësh edhe Ngarko një modul shembull për të parë një demonstrim të vogël.
  2. Mjeti kontrollon binarin, e validon dhe shfaq rezultatin: ✓ Moduli është i vlefshëm., ose arsyen pse nuk është.
  3. Lexo numëruesit: Funksionet (të importuara dhe të përcaktuara), Importet, Eksportet, Llojet, Memoriet, Tabelat dhe Globalet.
  4. Lexo çmontimin te Formati tekst i WebAssembly (WAT), pastaj Kopjo atë ose shtyp Shkarko .wat.
  5. Rregullo daljen me opsionet: Përdor emrat nga seksioni name, Shprehje të palosura (S-expressions) dhe Eksporte brenda funksionit.
  6. Hap tabelat Seksionet, Importet dhe Eksportet për strukturën e skedarit: çdo seksion me zhvendosjen në bajte, madhësinë dhe numrin e shënimeve.

Moduli nuk kompilohet, nuk instancohet dhe nuk ekzekutohet kurrë. Mjeti vetëm i lexon bajtet e tij dhe i kthen në tekst, ndaj është e sigurt të inspektosh një skedar që nuk e beson.

Çfarë tregon dalja WAT

WebAssembly ka dy formate ekuivalente: binarin kompakt .wasm që ngarkojnë shfletuesit dhe runtime-et, dhe formatin tekst .wat, i menduar për njerëzit. Çmontuesi shtyp çdo pjesë të modulit në formë teksti: llojet e funksioneve, importet, trupat e funksioneve, tabelat, memoriet, globalet, eksportet, funksionin start, segmentet element dhe segmentet e të dhënave.

Si parazgjedhje, instruksionet listohen një për rresht në rendin e stack-ut, ashtu siç ruhen:

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

Me Shprehje të palosura (S-expressions), operandët futen brenda instruksionit që i përdor, si te (i32.add (local.get $a) (local.get $b)), që shpesh është më i lehtë për t’u ndjekur. Eksporte brenda funksionit shkruan (export "add") brenda funksionit në vend të një liste të veçantë.

Emrat, informacioni i debug dhe validimi

Një skedar .wasm i referohet gjithçkaje me indeks. Kur kompilatori ka mbajtur një seksion të personalizuar name (e zakonshme në build-et e debug), Përdor emrat nga seksioni name shfaq emrat origjinalë si $factorial. Përndryshe wabt gjeneron emra si $f2 ose $t0 që teksti të mbetet i lexueshëm. Build-et e produksionit shpesh i heqin emrat, ndaj një modul i minifikuar do të shfaqë vetëm emra të gjeneruar.

Validimi ndjek specifikimin e WebAssembly: llojet duhet të përputhen në stack-un e operandëve, indekset duhet të ekzistojnë, e kështu me radhë. Një modul i pavlefshëm çmontohet prapë kur struktura e tij mund të lexohet, me gabimin e validimit pranë tij, gjë që ndihmon kur debugon një kompilator ose një binar të shkruar me dorë. Veçoritë post-MVP si SIMD, threads, bulk memory, reference types, multi-value, tail calls, exception handling, memory64 dhe garbage collection janë aktivizuar për lexim.

Ky mjet përdor wabt.js, ndërtimin JavaScript të WebAssembly Binary Toolkit (wasm2wat). Ngarkohet vetëm kur hap një skedar.

Pyetje të shpeshta

A mund ta marr kodin burimor origjinal C, C++ ose Rust?

Jo. WAT është një formë e lexueshme e binarit të kompiluar, jo një dekompilues: kodi burimor, komentet dhe pjesa më e madhe e informacionit të llojeve zhduken pas kompilimit. Emrat e funksioneve mbijetojnë vetëm kur seksioni name është mbajtur.

A ngarkohet skedari im?

Jo. Skedari lexohet dhe çmontohet në shfletuesin tënd; asgjë nuk dërgohet te një server.

Pse mjeti thotë që skedari nuk është binar WebAssembly?

Çdo modul fillon me katër bajtet \0asm të ndjekura nga versioni 1. Një skedar i shërbyer me përmbajtje tjetër, i kompresuar me gzip ose Brotli, ose një komponent WebAssembly (modeli më i ri i komponentëve) do të refuzohet.

Pse kutia e tekstit është e prerë?

Modulet shumë të mëdha mund të prodhojnë miliona rreshta. Kutia e tekstit shfaq pjesën e parë që faqja të mbetet e shpejtë; Shkarko .wat ruan tekstin e plotë.

A mund ta ekzekutoj ose ta testoj modulin këtu?

Jo. Moduli qëllimisht nuk instancohet kurrë, ndaj kodi i tij nuk mund të ekzekutohet në faqe. Për ta testuar, ngarkoje në projektin tënd ose në një runtime si wasmtime ose Node.js.