Les développeurs du moteur JavaScript V8 outil , permettant de décompiler une représentation binaire intermédiaire en un pseudo-langage lisible, similaire à JavaScript et C. Le pseudo-langage proposé est considérablement plus facile à comprendre et mieux adapté pour une analyse manuelle que la représentation textuelle de WebAssembly au format «.wat», qui se rapproche de l'assembleur plutôt que des langages de haut niveau. En même temps, la décompilation reflète autant que possible la représentation de Wasm.
Décompilateur dans l'outil , qui fournit la traduction entre les représentations binaire et textuelle de WebAssembly, ainsi que l'analyse, le traitement, la modification et la vérification des fichiers wasm. Au sein de WABT, un utilitaire est également en développement , permettant de décompiler des fichiers wasm en code équivalent en C, qui peut être compilé par un compilateur C, mais en termes de lisibilité, il ne diffère guère de la représentation textuelle «wat».
Par exemple, une fonction C compilée 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;
}
sera décompilée par l'utilitaire wasm-decompile en pseudo-langage
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
}
alors que la conversion au format texte «.wat» apparaîtra comme suit
(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))))))
Source : opennet.ru
