Desenvolvedores V8 introduziram um descompilador para WebAssembly

Desenvolvedores do mecanismo JavaScript V8 submetido utilidade wasm-descompilar, que permite descompilar uma representação binária intermediária Webassembly. em uma pseudo-linguagem legível que lembra JavaScript e C. A pseudo-linguagem proposta é muito 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óximo do assembler do que das linguagens de alto nível. Ao mesmo tempo, a descompilação, se possível, reflete totalmente a representação Wasm.

Descompilador ligado no kit de ferramentas WABT, que fornece tradução entre representações binárias e textuais do WebAssembly, bem como análise, processamento, modificação e verificação de arquivos wasm. Um utilitário também está sendo desenvolvido como parte do WABT wasm2c, que permite descompilar arquivos wasm em código C equivalente que pode ser compilado por um compilador C, mas não é muito diferente da representação textual de "wat" em termos de legibilidade.

Por exemplo, a função C original compilada em wasm

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

float ponto(const vec3 *a, const vec3 *b) {
return a->x * b->x +
a->y * b->y +
a->z * b->z;
}

será descompilado pelo utilitário wasm-decompile em uma pseudo-linguagem

função ponto(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
retornar aa*ba+ab*bb+ac*bc
}

ao converter para o formato de texto ".wat" ficaria assim

(func $dot (tipo 0) (param i32 i32) (resultado f32)
(f32.adicionar
(f32.adicionar
(f32.mul
(f32.carregar
(local.get 0))
(f32.carregar
(local.obter 1)))
(f32.mul
(f32.deslocamento de carga=4
(local.get 0))
(f32.deslocamento de carga=4
(local.obter 1))))
(f32.mul
(f32.deslocamento de carga=8
(local.get 0))
(f32.deslocamento de carga=8
(local.obter 1))))))

Fonte: opennet.ru

Adicionar um comentário