Utviklerne av V8 har presentert en dekompilator for WebAssembly

Utviklerne av JavaScript-motoren V8 presenterte et verktøy wasm-decompile, som lar deg dekompilere det mellomliggende binære formatet WebAssembly 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 included i verktøysettet WABT, 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 wasm2c, 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

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster