Ontwikkelaars van V8 hebben een decompiler voor WebAssembly gepresenteerd

Ontwikkelaars van de JavaScript-motor V8 werd gepresenteerd een tool wasm-decompile, waarmee je een tussenliggend binair formaat kunt decompileren WebAssembly naar een leesbare pseudotaal die lijkt op JavaScript en C. De voorgestelde pseudotaal is aanzienlijk eenvoudiger te begrijpen en beter geschikt voor handmatige analyse dan de tekstuele weergave van WebAssembly in het '.wat'-formaat, die dichter bij assembler ligt dan bij hoge programmeertalen. De decompilatie weerspiegelt naar behoefte volledig de representatie van Wasm.

Decompilator ingeschakeld die deel uitmaakt van de toolkit WABT, die translaties tussen binaire en tekstuele weergaven van WebAssembly mogelijk maakt, evenals de analyse, verwerking, modificatie en validatie van wasm-bestanden. Binnen WABT wordt ook het hulpprogramma wasm2c, ontwikkeld, waarmee je wasm-bestanden kunt decompileren naar equivalent C-code die met een C-compiler kan worden gecompileerd, maar qua leesbaarheid niet veel verschilt van de tekstuele weergave 'wat'.

Bijvoorbeeld, een in wasm gecompileerde C-functie

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

float dot(const vec3 *a, const vec3 *b) {
return a. * b. +
a. * b. +
a. * b.;
}

wordt door het hulpprogramma wasm-decompile gedecompileerd naar de pseudotaal

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
}

terwijl de omzetting naar het tekstuele formaat '.wat' er als volgt uitziet

(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))))))

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster