Twórcy silnika JavaScript V8 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. , umożliwiająca dekompilację pośredniej binarnej reprezentacji 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 skład narzędzi , 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 , 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
