Los desarrolladores del motor JavaScript V8 herramienta , que permite descompilar la representación binaria intermedia en un pseudo-lenguaje legible, similar a JavaScript y C. El pseudo-lenguaje propuesto es significativamente más fácil de entender y más adecuado para el análisis manual que la representación textual de WebAssembly en el formato «.wat», que está más cerca del ensamblador que de los lenguajes de alto nivel. Además, la descompilación refleja completamente la representación de Wasm siempre que sea posible.
Descompilador dentro del conjunto de herramientas , que proporciona la traducción entre representaciones binarias y textuales de WebAssembly, así como análisis, procesamiento, modificación y verificación de archivos wasm. Dentro de WABT también se desarrolla la herramienta , que permite descompilar archivos wasm en código equivalente en C, que puede ser compilado por un compilador de C, pero en términos de legibilidad, no difiere mucho de la representación textual «wat».
Por ejemplo, una función en C compilada en 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á descompilada por la herramienta wasm-decompile en el pseudo-lenguaje
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
}
mientras que la conversión al formato textual «.wat» se verá de la siguiente manera
(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))))))
Fuente: opennet.ru
