V8-programistoj prezentis malkompililon por WebAssembly

Programistoj de la V8 JavaScript-motoro prezentita utileco wasm-malkompilo, kiu ebligas al vi malkompili la mezan binaran prezenton RetejoAsembleo en legeblan pseŭdo-lingvon rememorigantan JavaScript kaj C. La proponita pseŭdo-lingvo estas multe pli facile komprenebla kaj pli taŭga por mana analizado ol la teksta reprezentado de WebAssembly en la formato ".wat", kiu estas pli proksima al asembla lingvo ol al altnivelaj lingvoj. En ĉi tiu kazo, la malkompilo reflektas la Wasm-reprezentadon kiel eble plej tute.

Malkompililo inkluzivita inkluzivita en la ilaro WABT, kiu disponigas tradukon inter binaraj kaj tekstaj reprezentadoj de WebAssembly, same kiel analizadon, prilaboradon, modifon kaj konfirmon de wasm-dosieroj. WABT ankaŭ evoluigas ilon wasm2c, kiu permesas al wasm-dosieroj esti malkompilitaj en ekvivalentan C-kodon kiu povas esti kompilita per C-kompililo, sed ne estas multe malsama laŭ legebleco de la teksta reprezentado de "wat".

Ekzemple, la origina C-funkcio kompilita en wasm

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

flosiga punkto (konst vec3 *a, konst vec3 *b) {
redonu a->x * b->x +
a->y * b->y +
a->z * b->z;
}

estos malkompilita per la ilo wasm-decompile en pseŭdolingvon

funkcio dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
reveni aa * ba + ab * bb + ac * bc
}

dum la konvertiĝo al tekstformato ".wat" aspektus tiel

(func $dot (tipo 0) (param i32 i32) (rezulto f32)
(f32.aldoni
(f32.aldoni
(f32.mul
(f32.ŝarĝo
(local.get 0))
(f32.ŝarĝo
(loka. akiri 1)))
(f32.mul
(f32.ŝarĝa ofseto=4
(local.get 0))
(f32.ŝarĝa ofseto=4
(loka. akiri 1))))
(f32.mul
(f32.ŝarĝa ofseto=8
(local.get 0))
(f32.ŝarĝa ofseto=8
(loka. akiri 1))))))

fonto: opennet.ru

Aldoni komenton