Bahlahisi ba V8 ba hlahisitse decompiler bakeng sa WebAssembly

Baetsi ba enjine ea V8 JavaScript hlahisoa thuso wasm-decompile, e leng se u lumellang hore u arole boemeli ba binary ba mahareng WebAssembly puong ea pseudo e ka baloang e hopotsang JavaScript le C. Puo ea maiketsetso e reriloeng e bonolo haholo ho e utloisisa ebile e loketse haholoanyane bakeng sa tlhaloso ea matsoho ho feta tlhahiso ea mongolo oa WebAssembly ka mokhoa oa ".wat", o haufi le puo ea kopano ho feta lipuo tsa boemo bo phahameng. Tabeng ena, ho arohana ho bonahatsa boemeli ba Wasm ka hohle kamoo ho ka khonehang.

Decompiler kenyellelitsoe e kenyelelitsoe ka har'a khiti ea lithulusi WABT, e fanang ka phetolelo pakeng tsa litlhaloso tsa binary le mongolo oa WebAssembly, hammoho le ho arola, ho sebetsa, ho fetola le ho netefatsa lifaele tsa wasm. WABT e boetse e nts'etsapele lisebelisoa wasm2c, e lumellang lifaele tsa wasm hore li aroloe hore e be khoutu ea C e lekanang le eona e ka bokelloang ke C compiler, empa ha e fapane haholo ka mokhoa oa ho baleha ho tsoa ho "wat".

Ka mohlala, mosebetsi oa pele oa C o hlophisitsoeng ka wasm

sebopeho sa typedef {float x, y, z; } vec3;

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

e tla aroloa ke sesebelisoa sa wasm-decompile hore e be puo ea pseudo

letheba la tšebetso(a:{a:float,b:float,c:float},
b:{a:float, b:float, c:float}):float {
khutla aa * ba + ab * bb + ac * bc
}

ha ho fetolela ho sebopeho sa mongolo ".wat" ho ne ho tla shebahala tjena

(sebetsa $dot (mofuta 0) (param i32 i32) (sephetho f32)
(f32.eketsa
(f32.eketsa
(f32.mul
(f32.load
(ea sebakeng.fumana 0))
(f32.load
(ea lehae.fumana 1)))
(f32.mul
(f32.load offset=4
(ea sebakeng.fumana 0))
(f32.load offset=4
(ea lehae.fumana 1)))
(f32.mul
(f32.load offset=8
(ea sebakeng.fumana 0))
(f32.load offset=8
(ea lehae.fumana 1)))))

Source: opennet.ru

Eketsa ka tlhaloso