Nagpakita ang mga developer ng V8 ng isang decompiler para sa WebAssembly

Mga developer ng V8 JavaScript engine ipinakita utility wasm-decompile, na nagbibigay-daan sa iyong i-decompile ang intermediate binary na representasyon WebAss Assembly sa isang nababasang pseudo-language na nakapagpapaalaala sa JavaScript at C. Ang iminungkahing pseudo-language ay mas madaling maunawaan at mas angkop para sa manual na pag-parse kaysa sa textual na representasyon ng WebAssembly sa ".wat" na format, na mas malapit sa assembly language kaysa sa mga high-level na wika. Sa kasong ito, ipinapakita ng decompilation ang representasyon ng Wasm nang ganap hangga't maaari.

Decompiler nakabukas kasama sa toolkit WABT, na nagbibigay ng pagsasalin sa pagitan ng binary at text na mga representasyon ng WebAssembly, pati na rin ang pag-parse, pagproseso, pagbabago at pag-verify ng wasm file. Gumagawa din ang WABT ng isang utility wasm2c, na nagpapahintulot sa wasm file na ma-decompiled sa katumbas na C code na maaaring i-compile ng isang C compiler, ngunit hindi gaanong naiiba sa mga tuntunin ng pagiging madaling mabasa mula sa textual na representasyon ng "wat".

Halimbawa, ang orihinal na C function na pinagsama-sama sa wasm

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

float tuldok(const vec3 *a, const vec3 *b) {
ibalik ang a->x * b->x +
a->y * b->y +
a->z * b->z;
}

ay made-decompile ng wasm-decompile utility sa isang pseudo-language

function na tuldok(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
ibalik ang aa * ba + ab * bb + ac * bc
}

habang ang conversion sa text format na ".wat" ay magiging ganito

(func $dot (type 0) (param i32 i32) (resulta 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.makakuha ng 1))))
(f32.mul
(f32.load offset=8
(local.get 0))
(f32.load offset=8
(local.makakuha ng 1))))))

Pinagmulan: opennet.ru

Magdagdag ng komento