V8-ontwikkelaars presenteerden een decompiler voor WebAssembly

Ontwikkelaars van de V8 JavaScript-engine ingediend nut wasm-decompileren, waarmee u de tussenliggende binaire representatie kunt decompileren WebAssembly in een leesbare pseudo-taal die doet denken aan JavaScript en C. De voorgestelde pseudo-taal is veel gemakkelijker te begrijpen en geschikter voor handmatig parseren dan de tekstuele weergave van WebAssembly in het “.wat”-formaat, dat dichter bij assembleertaal staat dan bij talen op hoog niveau. In dit geval weerspiegelt de decompilatie de Wasm-representatie zo volledig mogelijk.

Decompiler inbegrepen opgenomen in de gereedschapskist WABT, dat vertaling biedt tussen binaire en tekstrepresentaties van WebAssembly, evenals het parseren, verwerken, wijzigen en verifiëren van wasm-bestanden. WABT ontwikkelt ook een hulpprogramma wasm2c, waarmee wasm-bestanden kunnen worden gedecompileerd tot gelijkwaardige C-code die kan worden gecompileerd door een C-compiler, maar qua leesbaarheid niet veel verschilt van de tekstuele weergave van "wat".

De originele C-functie is bijvoorbeeld gecompileerd in wasm

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

zwevende punt(const vec3 *a, const vec3 *b) {
retourneer a->x * b->x +
a->y * b->y +
a->z * b->z;
}

zal door het hulpprogramma wasm-decompile worden gedecompileerd in een pseudo-taal

functie punt(a:{ a:zweven, b:zweven, c:zweven },
b:{ a:zweven, b:zweven, c:zweven }):zweven {
retourneer aa * ba + ab * bb + ac * bc
}

terwijl de conversie naar tekstformaat ".wat" er zo uit zou zien

(func $dot (type 0) (param i32 i32) (resultaat f32)
(f32.toevoegen
(f32.toevoegen
(f32.mul
(f32.laden
(lokaal.get 0))
(f32.laden
(lokaal.get 1)))
(f32.mul
(f32.belastingsverschuiving=4
(lokaal.get 0))
(f32.belastingsverschuiving=4
(lokaal.get 1))))
(f32.mul
(f32.belastingsverschuiving=8
(lokaal.get 0))
(f32.belastingsverschuiving=8
(lokaal.get 1))))))

Bron: opennet.ru

Voeg een reactie