Vývojári V8 predstavili dekompilátor pre WebAssembly

Vývojári JavaScriptového enginu V8 predstavili nástroj wasm-decompile, ktorý umožňuje dekompilovať medzitýmne binárne zastúpenie WebAssembly do čitateľného pseudo-jazyka, ktorý pripomína JavaScript a C. Navrhnutý pseudo-jazyk je podstatne jednoduchší na pochopenie a vhodnejší na ručné analýzy než textové zastúpenie WebAssembly vo formáte „.wat“, ktoré je bližšie k assembleru ako k vysokoúrovňovým jazykovým. Pri dekompilácii sa čo najviac odráža zastúpenie Wasm.

Dekompilátor je zapnutý v rámci nástrojového vybavenia WABT, ktorý zabezpečuje preklad medzi binárnym a textovým zastúpením WebAssembly, ako aj analýzu, spracovanie, modifikáciu a kontrolu wasm súborov. V rámci WABT sa tiež vyvíja nástroj wasm2c, ktorý umožňuje dekompilovať súbory wasm do ekvivalentného kódu v jazyku C, ktorý môže byť skompilovaný C kompilátorom, avšak z hľadiska čitateľnosti sa málo líši od textového zastúpenia „wat“.

Napríklad, preložená do wasm zdrojová C funkcia

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 dekompilovaná nástrojom wasm-decompile do pseudo-jazyka

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
}

zatiaľ čo prevod do textového formátu „.wat“ bude vyzerať nasledovne

(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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster