Els desenvolupadors de V8 van presentar un descompilador per a WebAssembly

Desenvolupadors del motor JavaScript V8 presentat utilitat wasm-descompilar, que permet descompilar la representació binària intermèdia WebAssembly en un pseudollenguatge llegible que recorda JavaScript i C. El pseudollenguatge proposat és molt més fàcil d'entendre i més adequat per a l'anàlisi manual que la representació textual de WebAssembly en el format ".wat", que és més proper al llenguatge assemblador que als llenguatges d'alt nivell. En aquest cas, la descompilació reflecteix la representació de Wasm de la manera més completa possible.

Descompilador inclòs inclòs al conjunt d'eines WABT, que proporciona traducció entre representacions binàries i de text de WebAssembly, així com anàlisi, processament, modificació i verificació dels fitxers wasm. WABT també està desenvolupant una utilitat wasm2c, que permet descompilar fitxers wasm en codi C equivalent que pot ser compilat per un compilador C, però no és gaire diferent en termes de llegibilitat de la representació textual de "wat".

Per exemple, la funció C original compilada en wasm

typedef struct { float x, y, z; } vec3;

punt flotant (const vec3 *a, const vec3 *b) {
retorna a->x * b->x +
a->y * b->y +
a->z * b->z;
}

serà descompilat per la utilitat wasm-decompile en un pseudollenguatge

funció dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
retorna aa * ba + ab * bb + ac * bc
}

mentre que la conversió al format de text ".wat" es veuria així

(func $dot (tipus 0) (param i32 i32) (resultat f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.desplaçament de càrrega=4
(local.get 0))
(f32.desplaçament de càrrega=4
(local.get 1))))
(f32.mul
(f32.desplaçament de càrrega=8
(local.get 0))
(f32.desplaçament de càrrega=8
(local.obté 1))))))

Font: opennet.ru

Afegeix comentari