Programiści V8 zaprezentowali dekompilator dla WebAssembly

Twórcy silnika JavaScript V8 przedstawili do konwertowania nagrań audio do formatu CAS, który jest obsługiwany przez emulatory, jednak z jakiegoś powodu nie udało mi się odczytać nagrań z moich kaset. wasm-decompile, umożliwiająca dekompilację pośredniej binarnej reprezentacji WebAssembly na czytelny pseudojęzyk przypominający JavaScript i C. Zaoferowany pseudojęzyk jest znacznie prostszy do zrozumienia i lepiej nadaje się do ręcznego analizy niż tekstowa reprezentacja WebAssembly w formacie „.wat”, która jest bliższa assemblerowi niż językom wysokiego poziomu. Dekompilacja w miarę możliwości w pełni odzwierciedla reprezentację Wasm.

Dekompilator włączono w skład narzędzi WABT, zapewniający tłumaczenie między binarną a tekstową reprezentacją WebAssembly, a także analizę, przetwarzanie, modyfikację i sprawdzanie plików wasm. W skład WABT rozwija się także narzędzie wasm2c, umożliwiające dekompilację plików wasm do równoważnego kodu w języku C, który można skompilować za pomocą kompilatora C, ale pod względem czytelności niewiele różni się od tekstowej reprezentacji „wat”.

Na przykład, skompilowana do wasm funkcja w C

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

zostanie zdekompilowana przez narzędzie wasm-decompile do pseudojęzyka

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
}

natomiast konwersja do formatu tekstowego „.wat” będzie wyglądać następująco

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

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster