JavaScript dzinÄja V8 izstrÄdÄtÄji rÄ«ku , kas ļauj dekompilÄt starpprodukta binÄro formÄtu 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 instrumentu komplektÄ , 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 , 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
