Sviluppatori del motore JavaScript V8 utilità , che consente di decompilare una rappresentazione binaria intermedia in un linguaggio pseudo-leggibile, simile a JavaScript e C. Il linguaggio pseudo-proposto è notevolmente più semplice da comprendere e più adatto per l'analisi manuale, rispetto alla rappresentazione testuale di WebAssembly nel formato ".wat", che è più vicino all'assemblatore che ai linguaggi di alto livello. In questo caso, la decompilazione riflette completamente la rappresentazione di Wasm quando possibile.
Decompilatore nella suite di strumenti , che fornisce la traduzione tra le rappresentazioni binarie e testuali di WebAssembly, oltre a analisi, elaborazione, modifica e verifica dei file wasm. All'interno di WABT si sviluppa anche l'utilità , che consente di decompilare file wasm in codice equivalente in linguaggio C, che può essere compilato da un compilatore C, ma in termini di leggibilità non si discosta molto dalla rappresentazione testuale "wat".
Ad esempio, la funzione C originaria 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;
}
verrà decompilata dall'utilità wasm-decompile in un linguaggio pseudo
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
}
mentre la conversione nel formato testuale ".wat" apparirà nel seguente modo
(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
