Gli sviluppatori V8 hanno introdotto un decompilatore per WebAssembly

Sviluppatori del motore JavaScript V8 purché utilità wasm-decompilare, che consente di decompilare la rappresentazione binaria intermedia WebAssembly in uno pseudo-linguaggio leggibile che ricorda JavaScript e C. Lo pseudolinguaggio proposto è molto più semplice da comprendere e più adatto all'analisi manuale rispetto alla rappresentazione testuale di WebAssembly nel formato “.wat”, che è più vicino al linguaggio assembly che ai linguaggi di alto livello. In questo caso la decompilazione rispecchia nel modo più completo possibile la rappresentazione Wasm.

decompilatore acceso incluso nel kit di strumenti WABT, che fornisce la traduzione tra rappresentazioni binarie e di testo di WebAssembly, nonché l'analisi, l'elaborazione, la modifica e la verifica dei file wasm. WABT sta anche sviluppando un'utilità wasm2c, che consente di decompilare i file wasm in codice C equivalente che può essere compilato da un compilatore C, ma non è molto diverso in termini di leggibilità dalla rappresentazione testuale di "wat".

Ad esempio, la funzione C originale compilata in wasm

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

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

verrà decompilato dall'utilità wasm-decompile in uno pseudo-linguaggio

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

mentre la conversione nel formato testo ".wat" sarebbe simile a questa

(funzione $punto (tipo 0) (parametro i32 i32) (risultato f32)
(f32.add
(f32.add
(f32.mul
(f32.carico
(local.get 0))
(f32.carico
(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))))))

Fonte: opennet.ru

Aggiungi un commento