Utilia

WASM–WAT konvertáló

Alakíts egy .wasm binárist olvasható WAT-szöveggé, ellenőrizd az érvényességét, és listázd a szakaszait, importjait és exportjait, a modul futtatása nélkül.

A modult csak beolvassa és szöveggé alakítja: soha nem fordítja le, nem példányosítja és nem futtatja.

Hogyan konvertálj WASM-ot WAT-tá

  1. Húzz egy .wasm fájlt a célterületre, vagy kattints rá a kiválasztáshoz (legfeljebb 20 MB). A Példamodul betöltése gombbal egy kis bemutatót is megnézhetsz.
  2. Az eszköz ellenőrzi a binárist, érvényesíti, és megmutatja az eredményt: ✓ A modul érvényes., vagy az okot, amiért nem az.
  3. Olvasd le a számlálókat: Függvények (importált és definiált), Importok, Exportok, Típusok, Memóriák, Táblák és Globális változók.
  4. Olvasd el a visszafordítást a WebAssembly szöveges formátum (WAT) mezőben, majd másold ki a Másolás gombbal, vagy nyomd meg a .wat letöltése gombot.
  5. Finomhangold a kimenetet a beállításokkal: Nevek használata a name szakaszból, Összevont kifejezések (S-kifejezések) és Soron belüli exportok.
  6. Nyisd meg a Szakaszok, Importok és Exportok táblázatokat a fájl szerkezetéhez: minden szakasz a bájteltolásával, méretével és bejegyzéseinek számával látható.

A modult az eszköz soha nem fordítja le, nem példányosítja és nem futtatja. Csak beolvassa a bájtjait, és szöveggé alakítja őket, így biztonságosan megvizsgálhatsz egy olyan fájlt is, amelyben nem bízol.

Mit mutat a WAT-kimenet

A WebAssemblynek két egyenértékű formátuma van: a tömör .wasm bináris, amelyet a böngészők és futtatókörnyezetek betöltenek, és a .wat szöveges formátum, amely emberek számára készült. A diszasszembler a modul minden részét szöveges formában kiírja: függvénytípusok, importok, függvénytörzsek, táblák, memóriák, globális változók, exportok, a start függvény, az elemszegmensek és az adatszegmensek.

Alapértelmezés szerint az utasítások soronként egyesével, verem-sorrendben szerepelnek, ahogyan tárolva vannak:

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

Az Összevont kifejezések (S-kifejezések) esetén az operandusok az őket használó utasításba vannak ágyazva, például (i32.add (local.get $a) (local.get $b)), ami gyakran könnyebben követhető. A Soron belüli exportok az (export "add") részt a függvényen belülre írja egy külön lista helyett.

Nevek, hibakeresési információk és érvényesítés

A .wasm fájl mindenre indexszel hivatkozik. Ha a fordító megtartott egy name egyéni szakaszt (hibakeresési buildeknél gyakori), a Nevek használata a name szakaszból az eredeti neveket mutatja, például $factorial. Egyébként a wabt olyan neveket generál, mint a $f2 vagy a $t0, hogy a szöveg olvasható maradjon. A kiadási buildekből gyakran eltávolítják a neveket, ezért egy minifikált modul csak generált neveket mutat.

Az érvényesítés a WebAssembly-specifikációt követi: a típusoknak egyezniük kell az operandusveremben, az indexeknek léteznie kell, és így tovább. Az érvénytelen modult is visszafordítja az eszköz, ha a szerkezete olvasható, mellette az érvényesítési hibával, ami segít egy fordító vagy egy kézzel írt bináris hibakeresésénél. Az MVP utáni funkciók, például a SIMD, a szálak, a tömeges memóriaműveletek, a referenciatípusok, a többértékű visszatérés, a tail call, a kivételkezelés, a memory64 és a szemétgyűjtés az olvasáshoz engedélyezve vannak.

Az eszköz a wabt.js-t használja, a WebAssembly Binary Toolkit (wasm2wat) JavaScript-változatát. Csak akkor töltődik be, amikor megnyitsz egy fájlt.

Gyakori kérdések

Visszakaphatom az eredeti C, C++ vagy Rust forráskódot?

Nem. A WAT a lefordított bináris olvasható formája, nem dekompilátor: a forráskód, a megjegyzések és a legtöbb típusinformáció a fordítás után elvész. A függvénynevek csak akkor maradnak meg, ha a name szakaszt megtartották.

Feltöltésre kerül a fájlom?

Nem. A fájlt a böngésződben olvassa be és fordítja vissza az eszköz; semmi nem kerül elküldésre egy szervernek.

Miért mondja az eszköz, hogy a fájl nem WebAssembly-bináris?

Minden modul a \0asm négy bájttal kezdődik, amelyet az 1-es verzió követ. Elutasításra kerül az a fájl, amelyet más tartalommal szolgáltak ki, gzip vagy Brotli tömörítéssel, vagy amely WebAssembly-komponens (az újabb komponensmodell).

Miért van levágva a szövegmező?

A nagyon nagy modulok akár milliónyi sort is eredményezhetnek. A szövegmező az első részt mutatja, hogy az oldal reszponzív maradjon; a .wat letöltése a teljes szöveget menti.

Futtathatom vagy tesztelhetem itt a modult?

Nem. A modult szándékosan soha nem példányosítja az eszköz, így a kódja nem futhat az oldalon. A teszteléshez töltsd be a saját projektedbe vagy egy futtatókörnyezetbe, például a wasmtime-ba vagy a Node.js-be.