Dezvoltatorii V8 au lansat un decompilator pentru WebAssembly

Dezvoltatorii motorului JavaScript V8 au prezentat utilitar wasm-decompile, care permite decompilarea unei reprezentări binare intermediare WebAssembly într-un pseudo-limbaj ușor de citit, asemănător cu JavaScript și C. Pseudo-limbajul propus este considerabil mai simplu pentru a fi înțeles și mai potrivit pentru analiza manuală decât reprezentarea textuală WebAssembly în formatul „.wat”, care se apropie mai mult de limbaj de asamblare decât de limbaje de nivel înalt. În plus, decompilarea reflectă, pe cât posibil, întreaga reprezentare Wasm.

Decompilator inclus în cadrul instrumentelor WABT, care asigură translația între reprezentările binare și textuale ale WebAssembly, precum și analiza, procesarea, modificarea și verificarea fișierelor wasm. În cadrul WABT se dezvoltă de asemenea utilitarul wasm2c, care permite decompilarea fișierelor wasm în cod echivalent în limbajul C, care poate fi compilat cu un compilator C, dar în ceea ce privește lizibilitatea, nu se deosebește mult de reprezentarea textului „wat”.

De exemplu, funcția C compilată în 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;
}

va fi decompilată de utilitarul wasm-decompile în pseudo-limbaj

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
}

în timp ce conversia în formatul text „.wat” va arăta astfel

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

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster