Os desenvolvedores do motor JavaScript V8 uma ferramenta , permitindo decompilar a representação binária intermediária em uma pseudo-linguagem legível, semelhante ao JavaScript e ao C. A pseudo-linguagem proposta é consideravelmente mais fácil de entender e mais adequada para análise manual do que a representação textual do WebAssembly no formato '.wat', que é mais próxima do assembler do que das linguagens de alto nível. A decompilação, sempre que possível, reflete totalmente a representação do Wasm.
Decompilador no conjunto de ferramentas , que oferece tradução entre as representações binárias e textuais do WebAssembly, bem como análise, processamento, modificação e verificação de arquivos wasm. Dentro do WABT, também está sendo desenvolvida a utilidade , que permite decompilar arquivos wasm em código equivalente em linguagem C, que pode ser compilado por compiladores C, mas em termos de legibilidade pouco difere da representação textual 'wat'.
Por exemplo, uma função em C compilada para 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;
}
será decompilada pela utilidade wasm-decompile em uma pseudo-linguagem
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
}
enquanto a transformação para o formato textual '.wat' será apresentada da seguinte forma
(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
