V8 programeri su predstavili dekompajler za WebAssembly

Programeri V8 JavaScript motora predstavljen korisnost wasm-decompile, što vam omogućava da dekompilirate posredni binarni prikaz WebAssembly u čitljiv pseudo-jezik koji podsjeća na JavaScript i C. Predloženi pseudo-jezik je mnogo lakši za razumevanje i pogodniji za ručno raščlanjivanje nego tekstualni prikaz WebAssembly-a u “.wat” formatu, koji je bliži asemblerskom jeziku nego jezicima visokog nivoa. U ovom slučaju, dekompilacija odražava Wasm reprezentaciju što je potpunije moguće.

Dekompilator uključeno uključeno u komplet alata WABT, koji obezbeđuje prevod između binarnih i tekstualnih reprezentacija WebAssembly-a, kao i raščlanjivanje, obradu, modifikaciju i verifikaciju wasm fajlova. WABT također razvija uslužni program wasm2c, koji omogućava wasm fajlovima da se dekompiliraju u ekvivalentan C kod koji može kompajlirati C kompajler, ali se ne razlikuje mnogo u smislu čitljivosti od tekstualnog prikaza "wat".

Na primjer, originalna C funkcija kompajlirana u wasm-u

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;
}

će biti dekompiliran od strane wasm-decompile uslužnog programa u pseudo-jezik

funkcija tačka(a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
return aa * ba + ab * bb + ac * bc
}

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

(funkcija $dot (tip 0) (param i32 i32) (rezultat f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(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