V8 izstrādātāji ir prezentējuÅ”i dekompilatoru WebAssembly

JavaScript dzinēja V8 izstrādātāji prezentēja rīku wasm-decompile, kas ļauj dekompilēt starpprodukta bināro formātu WebAssembly izlasāmā pseidovalodā, kas atgādina JavaScript un C. Piedāvātā pseidovaloda ir ievērojami vieglāk uztverama un piemērotāka manuālai analīzei nekā WebAssembly teksta attēlojums formātā ".wat", kas ir tuvāks asemblerim nekā augsta līmeņa valodām. Turklāt dekompilācija pēc iespējas pilnībā atspoguļo Wasm attēlojumu.

Dekompilators ir iekļauts instrumentu komplektā WABT, kas nodroÅ”ina pārvērÅ”anu starp bināro un teksta attēlojumiem WebAssembly, kā arÄ« analÄ«zi, apstrādi, modificēŔanu un pārbaudi wasm failiem. WABT ietver arÄ« rÄ«ku wasm2c, kas ļauj dekompilēt wasm failus ekvivalentā C valodas kodā, kas var tikt kompilēts C kompilatorā, bet pēc lasāmÄ«bas tas maz atŔķiras no teksta attēlojuma "wat".

Piemēram, C funkcija, kas compileta wasm formātā

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;
}

tiks dekompilēta, izmantojot rīku wasm-decompile, pseidovalodā

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
}

savukārt pārvērÅ”ana teksta formātā "wat" izskatÄ«sies Ŕādi

(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))))))

Avots: opennet.lv

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster