Udviklerne af JavaScript-motoren V8 værktøjet , der gør det muligt at dekompilere det mellemliggende binære format til et læsbart pseud sprog, der minder om JavaScript og C. Det foreslåede pseud sprog er væsentligt nemmere at forstå og mere velegnet til manuel analyse end den tekstlige repræsentation af WebAssembly i formatet «.wat», som er tættere på assembler end på højniveausprog. Dekompileringen afspejler så vidt muligt repræsentationen af Wasm.
Dekomptilator til værktøjet , som sikrer oversættelse mellem binære og tekstlige repræsentationer af WebAssembly samt analyse, behandling, modification og verifikation af wasm-filer. Som en del af WABT udvikles værktøjet også , der gør det muligt at dekompilere wasm-filer til ækvivalente C-koder, der kan kompilieres med en C-kompilator, men hvad angår læsbarhed adskiller det sig ikke meget fra den tekstlige repræsentation «wat».
For eksempel vil en C-funktion kompilere til 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;
}
blive dekompileret af værktøjet wasm-decompile til pseud sprog
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
}
mens konverteringen til tekstformatet «.wat» vil se således ud:
(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))))))
Kilde: opennet.ru
