Pengembang V8 memperkenalkan dekompiler untuk WebAssembly

Pengembang Mesin JavaScript V8 disajikan utilitas wasm-dekompilasi, yang memungkinkan dekompilasi representasi biner perantara WebAssembly menjadi bahasa semu yang dapat dibaca yang mengingatkan pada JavaScript dan C. Bahasa semu yang diusulkan jauh lebih mudah dipahami dan lebih cocok untuk penguraian manual daripada representasi tekstual WebAssembly dalam format ".wat", yang lebih mirip dengan assembler daripada bahasa tingkat tinggi. Pada saat yang sama, dekompilasi, jika memungkinkan, sepenuhnya mencerminkan representasi Wasm.

Pengurai termasuk dalam perangkat alat WABT, yang menyediakan terjemahan antara representasi biner dan tekstual dari WebAssembly, serta mem-parsing, memproses, memodifikasi, dan memeriksa file wasm. Utilitas juga sedang dikembangkan sebagai bagian dari WABT wasm2c, yang memungkinkan file wasm untuk didekompilasi menjadi kode C yang setara yang dapat dikompilasi oleh kompiler C, tetapi tidak jauh berbeda dengan representasi tekstual "wat" dalam hal keterbacaan.

Misalnya, fungsi C asli dikompilasi menjadi wasm

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

titik mengambang(const vec3 *a, const vec3 *b) {
mengembalikan a->x * b->x +
a->y * b->y +
a->z * b->z;
}

akan didekompilasi oleh utilitas dekompilasi wasm menjadi bahasa semu

fungsi titik(a:{ a:float, b:float, c:float },
b:{ a:mengambang, b:mengambang, c:mengambang }):mengambang {
kembalikan aa*ba+ab*bb+ac*bc
}

saat mengonversi ke format teks ".wat" akan terlihat seperti ini

(func $dot (tipe 0) (param i32 i32) (hasil f32)
(f32.tambahkan
(f32.tambahkan
(f32.mul
(f32.memuat
(lokal.dapatkan 0))
(f32.memuat
(lokal.dapatkan 1)))
(f32.mul
(f32.beban offset=4
(lokal.dapatkan 0))
(f32.beban offset=4
(local.dapatkan 1))))
(f32.mul
(f32.beban offset=8
(lokal.dapatkan 0))
(f32.beban offset=8
(local.dapatkan 1)))))))

Sumber: opennet.ru

Tambah komentar