Vývojáři JavaScriptového enginu V8 nástroj , která umožňuje dekompilaci mezijazykového binárního zastoupení do čitelného pseudojazyka, který připomíná JavaScript a C. Navržený pseudojazyk je výrazně jednodušší pro pochopení a lépe přizpůsoben pro ruční analýzu než textové vyjádření WebAssembly ve formátu ".wat", které je bližší assembleru než k vysoce úrovňovým jazykům. Přitom dekompilace se pokud možno zcela odráží v zastoupení Wasm.
Dekompilátor ve vybavení , který zajišťuje převod mezi binárním a textovým vyjádřením WebAssembly, stejně jako analýzu, zpracování, úpravu a kontrolu wasm-souborů. V rámci WABT také vzniká nástroj , který umožňuje dekompilaci souborů wasm do ekvivalentního kódu v jazyce C, který lze zkompilovat C-kompilátorem, ale z hlediska čitelnosti se málo liší od textového vyjádření "wat".
Například zkompilovaná v wasm původní C-funkce
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;
}
bude dekompilována nástrojem wasm-decompile do pseudojazyka
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
}
zatímco převod do textového formátu ".wat" bude vypadat následovně
(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))))))
Zdroj: opennet.ru
