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

Vývojári V8 JavaScript motora predložené užitočnosť wasm-dekompilovať, ktorý vám umožňuje dekompilovať prechodnú binárnu reprezentáciu WebAssembly do čitateľného pseudojazyka pripomínajúceho JavaScript a C. Navrhovaný pseudojazyk je oveľa ľahšie pochopiteľný a vhodnejší na manuálnu analýzu ako textová reprezentácia WebAssembly vo formáte „.wat“, ktorý je bližšie k jazyku symbolických inštrukcií ako k jazykom na vysokej úrovni. V tomto prípade dekompilácia odráža reprezentáciu Wasm čo najúplnejšie.

Dekompilátor zapnuté zahrnuté v súprave nástrojov WABT, ktorý poskytuje preklad medzi binárnymi a textovými reprezentáciami WebAssembly, ako aj analýzu, spracovanie, úpravu a overenie súborov wasm. WABT tiež vyvíja pomôcku wasm2c, ktorý umožňuje dekompilovať súbory wasm do ekvivalentného kódu C, ktorý je možné skompilovať kompilátorom C, ale z hľadiska čitateľnosti sa príliš nelíši od textovej reprezentácie „wat“.

Napríklad pôvodná funkcia C zostavená vo wasm

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

float dot(const vec3 *a, const vec3 *b) {
návrat a->x * b->x +
a->y * b->y +
a->z * b->z;
}

budú dekompilované pomocou nástroja wasm-decompile do pseudojazyka

funkcia bodka(a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
návrat aa * ba + ab * bb + ac * bc
}

pričom prevod do textového formátu ".wat" by vyzeral takto

(funkcia $dot (typ 0) (param i32 i32) (výsledok f32)
(f32.pridať
(f32.pridať
(f32.mul
(f32.zaťažiť
(local.get 0))
(f32.zaťažiť
(local.get 1)))
(f32.mul
(f32.offset záťaže=4
(local.get 0))
(f32.offset záťaže=4
(local.get 1))))
(f32.mul
(f32.offset záťaže=8
(local.get 0))
(f32.offset záťaže=8
(local.get 1))))))

Zdroj: opennet.ru

Pridať komentár