Gli sviluppatori di V8 hanno presentato un decompilatore per WebAssembly

Gli sviluppatori del motore JavaScript V8 hanno presentato un'utility wasm-decompile, che permette di decompilare la rappresentazione binaria intermedia WebAssembly in un linguaggio pseudo-leggero simile a JavaScript e C. Il linguaggio pseudo-proposto è significativamente più facile da comprendere e più adatto all'analisi manuale rispetto alla rappresentazione testuale di WebAssembly nel formato «.wat», che è più vicino all'assemblatore che ai linguaggi di alto livello. Inoltre, la decompilazione riflette il più possibile la rappresentazione di Wasm.

Decompilatore incluso nella suite di strumenti WABT, che fornisce traduzione tra rappresentazioni binarie e testuali di WebAssembly, oltre all'analisi, elaborazione, modifica e verifica dei file wasm. Nella suite di WABT è in fase di sviluppo anche l'utility wasm2c, che consente di decompilare file wasm in codice equivalente in linguaggio C, che può essere compilato con un compilatore C, ma in termini di leggibilità non è molto diverso dalla rappresentazione testuale «wat».

Ad esempio, una funzione in C compilata in wasm

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;
}

sarà decompilata dall'utilità wasm-decompile in un linguaggio intermedio

funzione dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
ritorna a.a * b.a + a.b * b.b + a.c * b.c
}

mentre la conversione in formato di testo ".wat" apparirà nel modo seguente

(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))))))

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster