V8 programeri predstavili su dekompilator za WebAssembly

Programeri V8 JavaScript motora predstavljeni korisnost wasm-dekompilirati, koji vam omogućuje dekompilaciju srednje binarne reprezentacije WebAssembly u čitljiv pseudo-jezik koji podsjeća na JavaScript i C. Predloženi pseudo-jezik mnogo je lakši za razumijevanje i prikladniji za ručno parsiranje od tekstualne reprezentacije WebAssemblija u formatu ".wat", koji je bliži asemblerskom jeziku nego jezicima visoke razine. U ovom slučaju, dekompilacija odražava Wasmov prikaz što je potpunije moguće.

Dekompiler uključen uključeni u komplet alata WABT, koji omogućuje prijevod između binarnih i tekstualnih prikaza WebAssemblyja, kao i raščlanjivanje, obradu, modificiranje i provjeru wasm datoteka. WABT također razvija pomoćni program wasm2c, koji omogućuje da se wasm datoteke dekompiliraju u ekvivalentni C kod koji se može prevesti pomoću C kompajlera, ali se ne razlikuje puno u smislu čitljivosti od tekstualnog prikaza "wat".

Na primjer, izvorna C funkcija kompajlirana u wasm

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

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

bit će dekompiliran uslužnim programom wasm-decompile u pseudo-jezik

funkcija dot(a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
povratak a.a * b.a + a.b * b.b + a.c * b.c
}

dok bi pretvorba u tekstualni format ".wat" izgledala ovako

(func $dot (type 0) (param i32 i32) (rezultat f32)
(f32.dodaj
(f32.dodaj
(f32.mul
(f32.opterećenje
(local.get 0))
(f32.opterećenje
(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))))))

Izvor: opennet.ru

Dodajte komentar