Gipresentar sa mga developer sa V8 ang usa ka decompiler alang sa WebAssembly

Mga developer sa V8 JavaScript engine gipresentar utility wasm-decompile, nga nagtugot kanimo sa pag-decompile sa intermediate binary nga representasyon WebAssembly ngadto sa usa ka mabasa nga pseudo-language nga nagpahinumdom sa JavaScript ug C. Ang gisugyot nga pseudo-language mas sayon ​​sabton ug mas haum para sa manwal nga pag-parse kay sa textual nga representasyon sa WebAssembly sa β€œ.wat” nga pormat, nga mas duol sa assembly language kaysa sa high-level nga mga pinulongan. Sa kini nga kaso, ang decompilation nagpakita sa representasyon sa Wasm sa hingpit kutob sa mahimo.

Decompiler gilakip gilakip sa toolkit WABT, nga naghatag ug hubad tali sa binary ug teksto nga mga representasyon sa WebAssembly, ingon man sa pag-parse, pagproseso, pagbag-o ug pag-verify sa wasm files. Ang WABT nagpalambo usab usa ka utility wasm2c, nga nagtugot sa wasm files nga ma-decompiled ngadto sa katumbas nga C code nga mahimong i-compile sa usa ka C compiler, apan dili kaayo lahi sa termino sa pagkabasa gikan sa textual nga representasyon sa "wat".

Pananglitan, ang orihinal nga C function nga gihugpong 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;
}

i-decompiled sa wasm-decompile utility ngadto sa usa ka pseudo-language

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

samtang ang pagkakabig sa format sa teksto nga ".wat" ingon niini

(func $dot (type 0) (param i32 i32) (resulta f32)
(f32.dugang
(f32.dugang
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.kuha 1)))
(f32.mul
(f32.load offset=4
(local.get 0))
(f32.load offset=4
(local.kuhaa ang 1))))
(f32.mul
(f32.load offset=8
(local.get 0))
(f32.load offset=8
(local.kuha 1))))))

Source: opennet.ru

Idugang sa usa ka comment