Zhvilluesit e V8 prezantuan një dekompilues për WebAssembly

Zhvilluesit e motorit V8 JavaScript prezantuar dobishmërisë wasm-dekompiloj, i cili ju lejon të dekompiloni paraqitjen e ndërmjetme binar WebAssembly në një pseudo-gjuhë të lexueshme që të kujton JavaScript dhe C. Pseudo-gjuha e propozuar është dukshëm më e lehtë për t'u kuptuar dhe më e përshtatshme për analizë manuale sesa përfaqësimi tekstual i WebAssembly në formatin ".wat", i cili është më afër me gjuhën e asamblesë sesa me gjuhët e nivelit të lartë. Në këtë rast, dekompilimi pasqyron përfaqësimin Wasm sa më plotësisht të jetë e mundur.

Dekompilues përfshirë të përfshira në paketën e veglave WABT, i cili ofron përkthim ndërmjet paraqitjeve binare dhe tekstuale të WebAssembly, si dhe analizimin, përpunimin, modifikimin dhe verifikimin e skedarëve wasm. WABT po zhvillon gjithashtu një shërbim wasm2c, i cili lejon që skedarët wasm të dekompilohen në kodin ekuivalent C që mund të kompilohet nga një përpilues C, por nuk është shumë i ndryshëm për sa i përket lexueshmërisë nga paraqitja tekstuale e "wat".

Për shembull, funksioni origjinal C i përpiluar në wasm

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

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

do të dekompilohet nga mjeti wasm-decompile në një pseudo-gjuhë

funksioni dot(a:{ a:float, b:float, c:float },
b:{ a: noton, b: noton, c: noton }): noton {
kthe aa * ba + ab * bb + ac * bc
}

ndërsa shndërrimi në format teksti ".wat" do të dukej kështu

(func $dot (lloji 0) (param i32 i32) (rezultati f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.merr 0))
(f32.load
(lokal.merr 1)))
(f32.mul
(f32. kompensimi i ngarkesës=4
(local.merr 0))
(f32. kompensimi i ngarkesës=4
(lokal.merr 1))))
(f32.mul
(f32. kompensimi i ngarkesës=8
(local.merr 0))
(f32. kompensimi i ngarkesës=8
(lokale.merr 1))))))

Burimi: opennet.ru

Shto një koment