Los desarrolladores de V8 introdujeron un descompilador para WebAssembly

Desarrolladores del motor JavaScript V8 presentado utilidad wasm-descompilar, que le permite descompilar la representación binaria intermedia WebAssembly en un pseudolenguaje legible que recuerda a JavaScript y C. El pseudolenguaje propuesto es mucho 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 se acerca más al lenguaje ensamblador que a los lenguajes de alto nivel. En este caso, la descompilación refleja la representación de Wasm de la forma más completa posible.

Descompilador incluido incluido en el kit de herramientas WABT, que proporciona traducción entre representaciones binarias y de texto de WebAssembly, así como análisis, procesamiento, modificación y verificación de archivos wasm. WABT también está desarrollando una utilidad wasm2c, que permite descompilar archivos wasm en código C equivalente que puede ser compilado por un compilador de C, pero no es muy diferente en términos de legibilidad de la representación textual de "wat".

Por ejemplo, la función C original compilada en wasm

estructura typedef { flotador x, y, z; }vec3;

punto flotante (const vec3 *a, const vec3 *b) {
devolver a->x * b->x +
a->y * b->y +
a->z * b->z;
}

será descompilado por la utilidad wasm-decompile en un pseudolenguaje

función punto(a:{ a:flotante, b:flotante, c:flotante },
b:{ a:flotante, b:flotante, c:flotante }):flotante {
devolver aa * ba + ab * bb + ac * bc
}

mientras que la conversión al formato de texto ".wat" se vería así

(func $punto (tipo 0) (param i32 i32) (resultado f32)
(f32.añadir
(f32.añadir
(f32.mul
(f32.cargar
(local.obtener 0))
(f32.cargar
(local.obtener 1)))
(f32.mul
(f32.compensación de carga = 4
(local.obtener 0))
(f32.compensación de carga = 4
(local.obtener 1))))
(f32.mul
(f32.compensación de carga = 8
(local.obtener 0))
(f32.compensación de carga = 8
(local.obtener 1))))))

Fuente: opennet.ru

Añadir un comentario