V8-ontwikkelaars het 'n decompiler vir WebAssembly bekendgestel

Ontwikkelaars van die V8 JavaScript-enjin aangebied nut wasm-dekompileer, wat jou toelaat om die intermediêre binêre voorstelling te dekompileer WebAssembly in 'n leesbare pseudo-taal wat aan JavaScript en C herinner. Die voorgestelde pseudo-taal is baie makliker om te verstaan ​​en meer geskik vir handmatige ontleding as die tekstuele voorstelling van WebAssembly in die “.wat”-formaat, wat nader aan samestellingstaal as aan hoëvlaktale is. In hierdie geval weerspieël die dekompilasie die Wasm-voorstelling so volledig as moontlik.

Desamesteller ingesluit ingesluit in die gereedskapstel WABT, wat vertaling verskaf tussen binêre en teksvoorstellings van WebAssembly, sowel as ontleding, verwerking, wysiging en verifikasie van wasm-lêers. WABT is ook besig om 'n hulpprogram te ontwikkel wasm2c, wat toelaat dat wasm-lêers gedekompileer word in ekwivalente C-kode wat deur 'n C-samesteller saamgestel kan word, maar is nie veel anders in terme van leesbaarheid van die tekstuele voorstelling van "wat" nie.

Byvoorbeeld, die oorspronklike C-funksie wat in wasm saamgestel is

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

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

sal deur die wasm-dekompileer-hulpmiddel in 'n pseudo-taal gedekompileer word

funksie punt(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
gee aa * ba + ab * bb + ac * bc terug
}

terwyl die omskakeling na teksformaat ".wat" so sou lyk

(func $dot (tipe 0) (param i32 i32) (resultaat f32)
(f32.add
(f32.add
(f32.mul
(f32.laai
(local.get 0))
(f32.laai
(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))))))

Bron: opennet.ru

Voeg 'n opmerking