Os desenvolvedores do V8 apresentaram um decompilador para WebAssembly

Os desenvolvedores do motor JavaScript V8 apresentaram uma ferramenta wasm-decompile, permitindo decompilar a representação binária intermediária WebAssembly em uma pseudo-linguagem legível, semelhante ao JavaScript e ao C. A pseudo-linguagem proposta é consideravelmente mais fácil de entender e mais adequada para análise manual do que a representação textual do WebAssembly no formato '.wat', que é mais próxima do assembler do que das linguagens de alto nível. A decompilação, sempre que possível, reflete totalmente a representação do Wasm.

Decompilador incluso no conjunto de ferramentas WABT, que oferece tradução entre as representações binárias e textuais do WebAssembly, bem como análise, processamento, modificação e verificação de arquivos wasm. Dentro do WABT, também está sendo desenvolvida a utilidade wasm2c, que permite decompilar arquivos wasm em código equivalente em linguagem C, que pode ser compilado por compiladores C, mas em termos de legibilidade pouco difere da representação textual 'wat'.

Por exemplo, uma função em C compilada para 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;
}

será decompilada pela utilidade wasm-decompile em uma pseudo-linguagem

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
}

enquanto a transformação para o formato textual '.wat' será apresentada da seguinte forma

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

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster