JavaScript V8 mootorit arendajad utiliidi , mis võimaldab vahe-binaarset esindust dekompileerida loetavaks pseudokeeleks, mis meenutab JavaScripti ja C-d. Pakutav pseudokeel on oluliselt lihtsam arusaadav ja sobivam käsitsi analüüsiks kui WebAssembly teksti esitus formaadis ".wat", mis on lähemal assemblerile kui kõrgetasemelistele keeltele. Samal ajal kajastab dekompileerimine võimalusel täielikult Wasmi esindust.
Dekomplilaator WABT tööriistade komplekti wasm2c , позволяющая декомпилировать файлы wasm в эквивалентный код на языке Си, который может быть скомпилирован Си-компилятором, но в плане читаемости мало чем отличается от текстового представления «wat».
Näiteks, C-funktsioon, mis on kompileeritud wasm-iks
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;
}
dekompileeritakse utiliidiga wasm-decompile pseudokeelde
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
}
textiforma «.wat» kujutab endast järgmist
(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))))))
Allikas: opennet.ru
