Vývojáři V8 představili dekompilátor pro WebAssembly

Vývojáři JavaScriptového enginu V8 představili nástroj wasm-decompile, která umožňuje dekompilaci mezijazykového binárního zastoupení WebAssembly 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 bylo zapnuto ve vybavení WABT, 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 wasm2c, 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster