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

WebAssembly Новости

Разработчики JavaScript-движка V8 представили утилиту wasm-decompile, позволяющую декомпилировать промежуточное бинарное представление WebAssembly в читаемый псевдоязык, напоминающий JavaScript и Си. Предложенный псевдоязык существенно проще для восприятия и более пригоден для ручного разбора, чем текстовое представление WebAssembly в формате “.wat”, который ближе к ассемблеру, чем к высокоуровневым языкам. При этом декомпиляция по возможности полностью отражает представление Wasm.

Декомпилятор включён в состав инструментария WABT, обеспечивающего трансляцию между бинарным и текстовым представлениями WebAssembly, а также разбор, обработку, модификацию и проверку wasm-файлов. В составе WABT также развивается утилита wasm2c, позволяющая декомпилировать файлы wasm в эквивалентный код на языке Си, который может быть скомпилирован Си-компилятором, но в плане читаемости мало чем отличается от текстового представления “wat”.

Например, скомпилированная в wasm исходная Си-функция:

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

будет декомпилирована утилитой 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))))))

Publisher
Оцените автора
AsaDagar
Добавить комментарий