V8 Entwéckler hunn en Decompiler fir WebAssembly presentéiert

Entwéckler vum V8 JavaScript Motor presentéiert Déngscht wasm-dekompiléieren, wat Iech erlaabt d'intermediate binär Representatioun ze dekompiléieren WebAssemblée an eng liesbar Pseudo-Sprooch erënnert un JavaScript an C. Déi proposéiert Pseudo-Sprooch ass wesentlech méi einfach ze verstoen a méi gëeegent fir manuell Parsing wéi d'textuell Representatioun vu WebAssembly am ".wat"-Format, wat méi no un der Assembléesprooch ass wéi zu héije Sproochen. An dësem Fall reflektéiert d'Dekompilatioun d'Wassm Representatioun sou komplett wéi méiglech.

Decompiler abegraff am Toolkit abegraff WABT, déi Iwwersetzung tëscht binären an Textrepresentatioune vu WebAssembly ubitt, souwéi Parsing, Veraarbechtung, Modifikatioun a Verifizéierung vu Wasm Dateien. WABT entwéckelt och en Utility war 2c, wat et erlaabt Wasm-Dateien an gläichwäerteg C-Code ze dekompiléieren, dee vun engem C-Compiler kompiléiert ka ginn, awer ass net vill anescht wéi d'Liesbarkeet vun der textueller Representatioun vu "wat".

Zum Beispill, déi ursprénglech C Funktioun kompiléiert a wasm

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

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

gëtt vum Wasm-Decompile-Utility an eng Pseudo-Sprooch dekompiléiert

Funktioun Punkt(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
zréckginn a.a * b.a + a.b * b.b + a.c * b.c
}

während d'Konversioun an Textformat ".wat" esou ausgesinn

(Func $dot (Typ 0) (param i32 i32) (Resultat 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))))))

Source: opennet.ru

Setzt e Commentaire