Gli sviluppatori del motore JavaScript V8 un'utility , che permette di decompilare la rappresentazione binaria intermedia in un linguaggio pseudo-leggero simile a JavaScript e C. Il linguaggio pseudo-proposto è significativamente più facile da comprendere e più adatto all'analisi manuale rispetto alla rappresentazione testuale di WebAssembly nel formato «.wat», che è più vicino all'assemblatore che ai linguaggi di alto livello. Inoltre, la decompilazione riflette il più possibile la rappresentazione di Wasm.
Decompilatore nella suite di strumenti , che fornisce traduzione tra rappresentazioni binarie e testuali di WebAssembly, oltre all'analisi, elaborazione, modifica e verifica dei file wasm. Nella suite di WABT è in fase di sviluppo anche l'utility , che consente di decompilare file wasm in codice equivalente in linguaggio C, che può essere compilato con un compilatore C, ma in termini di leggibilità non è molto diverso dalla rappresentazione testuale «wat».
Ad esempio, una funzione in C compilata in 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;
}
sarà decompilata dall'utilità wasm-decompile in un linguaggio intermedio
funzione dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
ritorna a.a * b.a + a.b * b.b + a.c * b.c
}
mentre la conversione in formato di testo ".wat" apparirà nel modo seguente
(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))))))
Fonte: opennet.ru
