I sviluppatori V8 anu prisentatu un decompiler per WebAssembly

Sviluppatori di u mutore JavaScript V8 prisentatu utilità wasm-decompile, chì permette di decompile a rapprisintazioni binaria intermediata assemblea web in una pseudo-lingua leggibile chì ricorda JavaScript è C. U pseudo-lingua pruposta hè assai più faciule da capisce è più adattatu per l'analisi manuale chì a rapprisintazioni testuale di WebAssembly in u formatu ".wat", chì hè più vicinu à a lingua di assemblea chè à e lingue d'altu livellu. In questu casu, a decompilazione riflette a rapprisintazioni Wasm cum'è cumpletamente pussibule.

Decompiler inclusu inclusu in u toolkit WABT, chì furnisce a traduzzione trà e rapprisintazioni binari è testu di WebAssembly, è ancu di analisi, trasfurmazioni, mudificazione è verificazione di i fugliali wasm. WABT hè ancu sviluppatu una utilità wasm2c, chì permette à i schedari wasm esse decompiled in codice C equivalente chì pò esse compilatu da un compilatore C, ma ùn hè micca assai sfarente in termini di leggibilità da a rapprisintazioni testuale di "wat".

Per esempiu, a funzione C originale compilata in wasm

typedef struct { float x, y, z; } vec3;

float dot (const vec3 *a, const vec3 *b) {
torna a->x * b->x +
a->y * b->y +
a->z * b->z;
}

serà decompilatu da l'utilità wasm-decompile in una pseudo-lingua

funzione dot(a:{a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
torna aa * ba + ab * bb + ac * bc
}

mentri la cunversione à u furmatu di testu ".wat" avissi a taliari stu

(func $dot (tipu 0) (param i32 i32) (risultatu f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.offset di carica = 4
(local.get 0))
(f32.offset di carica = 4
(local.get 1))))
(f32.mul
(f32.offset di carica = 8
(local.get 0))
(f32.offset di carica = 8
(local.get 1))))))

Source: opennet.ru

Add a comment