Ontwikkelaars van de JavaScript-motor V8 een tool , waarmee je een tussenliggend binair formaat kunt decompileren 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 die deel uitmaakt van de toolkit , 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 , 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
