Pembangun V8 membentangkan penyahkompil untuk WebAssembly

Pembangun enjin JavaScript V8 dibentangkan utiliti wasm-decompile, yang membolehkan anda menyahkompilasi perwakilan binari perantaraan webassembly ke dalam bahasa pseudo yang boleh dibaca mengingatkan JavaScript dan C. Bahasa pseudo yang dicadangkan adalah lebih mudah difahami dan lebih sesuai untuk penghuraian manual berbanding perwakilan tekstual WebAssembly dalam format ".wat", yang lebih dekat dengan bahasa himpunan berbanding bahasa peringkat tinggi. Dalam kes ini, dekompilasi mencerminkan perwakilan Wasm selengkap mungkin.

Decompiler dihidupkan disertakan dalam toolkit WABT, yang menyediakan terjemahan antara perwakilan binari dan teks WebAssembly, serta penghuraian, pemprosesan, pengubahsuaian dan pengesahan fail wasm. WABT juga sedang membangunkan utiliti wasm2c, yang membolehkan fail wasm dinyahkompilasi menjadi kod C setara yang boleh disusun oleh pengkompil C, tetapi tidak jauh berbeza dari segi kebolehbacaan daripada perwakilan tekstual "wat".

Sebagai contoh, fungsi C asal yang disusun dalam wasm

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

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

akan didecompiled oleh utiliti wasm-decompile ke dalam bahasa pseudo

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

manakala penukaran kepada format teks ".wat" akan kelihatan seperti ini

(fungsi $dot (jenis 0) (param i32 i32) (hasil f32)
(f32.tambah
(f32.tambah
(f32.mul
(f32.load
(local.dapat 0))
(f32.load
(local.dapat 1)))
(f32.mul
(f32.load offset=4
(local.dapat 0))
(f32.load offset=4
(local.dapat 1))))
(f32.mul
(f32.load offset=8
(local.dapat 0))
(f32.load offset=8
(tempatan.dapatkan 1))))))

Sumber: opennet.ru

Tambah komen