Dezvoltatorii motorului JavaScript V8 utilitar , care permite decompilarea unei reprezentări binare intermediare într-un pseudo-limbaj ușor de citit, asemănător cu JavaScript și C. Pseudo-limbajul propus este considerabil mai simplu pentru a fi înțeles și mai potrivit pentru analiza manuală decât reprezentarea textuală WebAssembly în formatul „.wat”, care se apropie mai mult de limbaj de asamblare decât de limbaje de nivel înalt. În plus, decompilarea reflectă, pe cât posibil, întreaga reprezentare Wasm.
Decompilator în cadrul instrumentelor , care asigură translația între reprezentările binare și textuale ale WebAssembly, precum și analiza, procesarea, modificarea și verificarea fișierelor wasm. În cadrul WABT se dezvoltă de asemenea utilitarul , care permite decompilarea fișierelor wasm în cod echivalent în limbajul C, care poate fi compilat cu un compilator C, dar în ceea ce privește lizibilitatea, nu se deosebește mult de reprezentarea textului „wat”.
De exemplu, funcția C compilată în wasm
typedef struct { float x, y, z; } vec3;
float dot(const vec3 *a, const vec3 *b) {
return a->x * b->x +
a->y * b->y +
a->z * b->z;
}
va fi decompilată de utilitarul wasm-decompile în pseudo-limbaj
function dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
return a.a * b.a + a.b * b.b + a.c * b.c
}
în timp ce conversia în formatul text „.wat” va arăta astfel
(func $dot (type 0) (param i32 i32) (result 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))))))
Sursa: opennet.ro
