V8-kehittäjät esittelivät WebAssemblyn purkajan

V8 JavaScript -moottorin kehittäjät esitetty hyödyllisyys wasm-decompile, jonka avulla voit purkaa välimuotoisen binääriesityksen WebAssembly luettavaksi pseudokieleksi, joka muistuttaa JavaScriptiä ja C:tä. Ehdotettu pseudokieli on paljon helpompi ymmärtää ja sopii paremmin manuaaliseen jäsennykseen kuin WebAssemblyn tekstiesitys ".wat"-muodossa, joka on lähempänä assembly-kieltä kuin korkean tason kieliä. Tässä tapauksessa purku heijastaa Wasm-esitystä mahdollisimman täydellisesti.

Kääntäjä mukana sisältyy työkalupakkiin WABT, joka tarjoaa käännöksen WebAssemblyn binääri- ja tekstiesitysten välillä sekä Wasm-tiedostojen jäsentämisen, käsittelyn, muokkaamisen ja tarkistamisen. WABT kehittää myös apuohjelmaa wasm2c, joka mahdollistaa wasm-tiedostojen purkamisen vastaavaksi C-koodiksi, joka voidaan kääntää C-kääntäjällä, mutta se ei eroa luettavuuden suhteen paljoakaan "watin" tekstimuodosta.

Esimerkiksi alkuperäinen C-funktio, joka on käännetty wasm:iin

typedef struct { float x, y, z; } vec3;

kelluva piste(const vec3 *a, const vec3 *b) {
palauttaa a->x * b->x +
a->y * b->y +
a->z* b->z;
}

puretaan wasm-decompile -apuohjelmalla pseudokieleksi

funktio dot(a:{ a:kelluke, b:kelluke, c:kelluke },
b:{ a: float, b: float, c: float }): float {
paluu aa * ba + ab * bb + ac * bc
}

kun taas muunnos tekstimuotoon ".wat" näyttäisi tältä

(toiminto $piste (tyyppi 0) (param i32 i32) (tulos f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(paikallinen.saa 0))
(f32.load
(paikallinen.get 1)))
(f32.mul
(f32.load offset=4
(paikallinen.saa 0))
(f32.load offset=4
(paikallinen.hanki 1))))
(f32.mul
(f32.load offset=8
(paikallinen.saa 0))
(f32.load offset=8
(paikallinen.hanki 1))))))

Lähde: opennet.ru

Lisää kommentti