A V8 JavaScript-motor fejlesztői segédprogramot , amely lehetővé teszi a köztes bináris reprezentáció dekompilálását olvasmányos, JavaScript-re és C-re hasonlító álnyelvre. Az ajánlott álnyelv lényegesen egyszerűbben érthető és alkalmasabb a manuális elemzésre, mint a WebAssembly szöveges megjelenítése a «.wat» formátumban, amely közelebb áll az assemblerhez, mint a magas szintű nyelvekhez. A dekompilálás a lehetőségek szerint teljes mértékben tükrözi a Wasm reprezentációját.
Dekompilátor a WABT eszközcsomag részeként , amely biztosítja a WebAssembly bináris és szöveges reprezentációi közötti fordítást, valamint a wasm-fájlok elemzését, feldolgozását, módosítását és ellenőrzését. A WABT keretein belül fejlesztés alatt áll egy , amely lehetővé teszi a wasm fájlok C nyelvű egyenértékű kódra való dekompilálását, amelyet C fordítóval lehet fordítani, de olvashatóság szempontjából alig különbözik a «wat» szöveges reprezentációtól.
Például a wasm-be fordított C forrásfunkció
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;
}
a wasm-decompile utilitás által az álnyelvre dekompilálva a következőképpen fog kinézni
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
}
míg a szöveges «.wat» formátumba való átalakítás a következőképpen fog kinézni
(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))))))
Forrás: opennet.ru
