Razvijalci V8 so predstavili dekompilator za WebAssembly

Razvijalci motorja V8 JavaScript predstavljeno uporabnost wasm-decompile, ki vam omogoča dekompilacijo vmesne binarne predstavitve WebAssembly v berljiv psevdo-jezik, ki spominja na JavaScript in C. Predlagani psevdo-jezik je veliko lažje razumljiv in bolj primeren za ročno razčlenjevanje kot besedilna predstavitev WebAssembly v formatu ».wat«, ki je bližje zbirnemu jeziku kot jezikom na visoki ravni. V tem primeru dekompilacija čim bolj popolno odraža predstavitev Wasm.

Decompiler vklopljen vključeno v komplet orodij WABT, ki zagotavlja prevod med binarnimi in besedilnimi predstavitvami WebAssembly ter razčlenjevanje, obdelavo, spreminjanje in preverjanje datotek wasm. WABT razvija tudi pripomoček wasm2c, ki omogoča, da se datoteke wasm dekompilirajo v enakovredno kodo C, ki jo lahko prevede prevajalnik C, vendar se v smislu berljivosti ne razlikuje veliko od besedilne predstavitve "wat".

Na primer, izvirna funkcija C, prevedena v wasm

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

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

bo pripomoček wasm-decompile dekompiliral v psevdo-jezik

funkcija dot(a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
vrni aa * ba + ab * bb + ac * bc
}

medtem ko bi pretvorba v besedilno obliko ".wat" izgledala takole

(func $dot (tip 0) (param i32 i32) (rezultat f32)
(f32.dodaj
(f32.dodaj
(f32.mul
(f32.obremenitev
(local.get 0))
(f32.obremenitev
(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))))))

Vir: opennet.ru

Dodaj komentar