Razvijalci JavaScript motorja V8 orodje , ki omogoča dekompilacijo vmesne binarne predstavitve v berljiv psevdokod, podoben JavaScriptu in C. Predlagani psevdokod je bistveno lažje razumljiv in bolj primeren za ročno analizo kot besedilna predstavitev WebAssembly v formatu '.wat', ki je bližje assemblerju kot visokim programskimi jeziki. Dekomplijacija se pri tem čim bolj natančno odraža v predstavitvi Wasm.
Dekomplijator v sklopu orodne vrstice , ki zagotavlja prevod med binarno in besedilno predstavitvijo WebAssembly ter analizo, obdelavo, modifikacijo in preverjanje wasm-datotek. V sklopu WABT se razvija tudi orodje , ki omogoča dekompilacijo datotek wasm v ekvivalentno kodo v jeziku C, ki jo lahko skompilira C prevajalnik, vendar po berljivosti malo spominja na besedilno predstavitev 'wat'.
Na primer, skompilirana v wasm izvorna C funkcija
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;
}
bo dekompilirana z orodjem wasm-decompile v psevdokod
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
}
medtem ko bo pretvorba v besedilni format '.wat' videti takole
(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))))))
Izvor: opennet.ru
