JavaScript-kiirus V8 arendajad utiliit , mis vĂ”imaldab dekompileerida vahepealse binaarset esitamist loetavaks pseudokeeleks, mis meenutab JavaScripti ja C-d. Pakutud pseudokeel on tunduvalt lihtsam mĂ”ista ja sobib paremini kĂ€sitsi analĂŒĂŒsimiseks kui WebAssembly tekstiline esitus formaadis â.watâ, mis on lĂ€hemal assemblerile kui kĂ”rgema taseme keeltele. Samal ajal kajastab dekompileerimine vĂ”imalikult tĂ€ielikult Wasmi esitamist.
Dekompilaator WABT tööriistade komplekti , mis pakub tĂ”lget binaarse ja tekstilise WebAssembly vahel, samuti analĂŒĂŒsi, töötlemise, muutmise ja wasm-failide kontrollimist. WABT-s arendatakse ka utiliiti , mis vĂ”imaldab dekompileerida wasm-failid samavÀÀrseks C keeles, mida saab C-kompilaatoriga kompileerida, kuid loetavuse osas ei erine see palju tekstilisest esitusest âwatâ.
NĂ€iteks wasm-ks kompileeritud algne C-funktsioon
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;
}
dekompileeritakse utiliidiga wasm-decompile pseudokeelde
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
}
samal ajal kui tekstivormingusse â.watâ teisendamine nĂ€eb vĂ€lja jĂ€rgmine
(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))))))
Allikas: opennet.ru
