Utviklerne av JavaScript-motoren V8 et verktøy , som lar deg dekompilere det mellomliggende binære formatet til et lesbart pseudoprogrammeringsspråk, som minner om JavaScript og C. Det foreslåtte pseudoprogrammeringsspråket er mye enklere å forstå og mer egnet for manuell analyse enn den tekstlige representasjonen av WebAssembly i formatet «.wat», som er nærmere assembler enn høynivåspråk. Dekomplileringen gjenspeiler i størst mulig grad Wasm-representasjonen.
Dekomplilator i verktøysettet , som tilbyr oversettelse mellom den binære og tekstlige representasjonen av WebAssembly, samt analyse, bearbeiding, modifikasjon og validering av wasm-filer. I WABT utvikles det også et verktøy , som lar deg dekompilere wasm-filer til ekvivalent kode i C, som kan kompilere med en C-kompilator, men hva gjelder lesbarhet, skiller det seg lite fra den tekstlige representasjonen «wat».
For eksempel vil en C-funksjon som er kompilert til wasm
typedef struct { float x, y, z; } vec3;
float dot(const vec3 *a, const vec3 *b) {
return a->x * b->x +
a->y * b->y +
a->z * b->z;
}
bli dekompilert av verktøyet wasm-decompile til pseudoprogrammeringsspråk
function dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
return a.a * b.a + a.b * b.b + a.c * b.c
}
mens konverteringen til tekstformatet «.wat» vil se slik ut
(func $dot (type 0) (param i32 i32) (result f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.load offset=4
(local.get 0))
(f32.load offset=4
(local.get 1))))
(f32.mul
(f32.load offset=8
(local.get 0))
(f32.load offset=8
(local.get 1))))))
Kilde: opennet.ru
