A V8 fejlesztői bemutattak egy visszafordítót a WebAssembly számára

A V8 JavaScript motor fejlesztői bemutatott hasznosság wasm-decompile, amely lehetővé teszi a közbenső bináris reprezentáció visszafejtését WebAssemble olvasható pszeudonyelvre, amely a JavaScriptre és a C-re emlékeztet. A javasolt pszeudonyelv sokkal könnyebben érthető és kézi elemzésre alkalmasabb, mint a WebAssembly szöveges megjelenítése „.wat” formátumban, amely közelebb áll az assembly nyelvhez, mint a magas szintű nyelvekhez. Ebben az esetben a dekompiláció a lehető legteljesebben tükrözi a Wasm-reprezentációt.

Decompiler bekapcsolva szerepel az eszköztárban WABT, amely a WebAssembly bináris és szöveges megjelenítései közötti fordítást, valamint a wasm fájlok elemzését, feldolgozását, módosítását és ellenőrzését biztosítja. A WABT egy segédprogramot is fejleszt wasm2c, amely lehetővé teszi a wasm fájlok ekvivalens C kódokká történő visszafordítását, amelyeket egy C fordító is lefordíthat, de az olvashatóság tekintetében nem sokban különbözik a "wat" szöveges megjelenítésétől.

Például az eredeti C függvény, amely a wasm-ben van lefordítva

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

a wasm-decompile segédprogram pszeudonyelvvé fogja visszafordítani

függvény dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
return aa * ba + ab * bb + ac * bc
}

míg a ".wat" szöveges formátumra való átalakítás így nézne ki

(func $dot (0. típus) (i32 i32 paraméter) (f32 eredmény)
(f32.add
(f32.add
(f32.mul
(f32.load
(helyi.get 0))
(f32.load
(helyi.get 1)))
(f32.mul
(f32.load offset=4
(helyi.get 0))
(f32.load offset=4
(helyi.get 1))))
(f32.mul
(f32.load offset=8
(helyi.get 0))
(f32.load offset=8
(helyi.get 1))))))

Forrás: opennet.ru

Hozzászólás