Разработчиците на V8 представиха декомпилатор за WebAssembly

Разработчиците на JavaScript енджина V8 представиха утилита wasm-decompile, която позволява декомпилация на междинното бинарно представяне WebAssembly в четим псевдоязик, наподобяващ JavaScript и C. Предложеното псевдоязик е значително по-лесно за възприемане и по-подходящо за ръчно разбиране, отколкото текстовото представяне на WebAssembly във формат „.wat“, което е по-близо до асемблера, отколкото до високо ниво езици. В същото време декомпилацията по възможност напълно отразява представянето на Wasm.

Декомпилатор е включен в състава на инструментариума WABT, който осигурява транслация между бинарни и текстови представяния на WebAssembly, както и разбиране, обработка, модификация и проверка на wasm-файлове. Във WABT също се развива утилитата wasm2c, която позволява декомпилация на wasm файлове в еквивалентен код на C, който може да бъде компилиран с C компилатор, но по отношение на четимост не се различава много от текстовото представяне „wat“.

Например, компилираната в wasm изходна C функция

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

float dot(const vec3 *a, const vec3 *b) {
return a. * b. +
a. * b. +
a. * b.;
}

ще бъде декомпилирана с помощта на утилитата wasm-decompile в псевдоязик

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
}

докато преобразуването в текстовия формат „.wat“ ще изглежда по следния начин

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

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster