Name: | Description: | Size: | Format: | |
---|---|---|---|---|
4.27 MB | Adobe PDF |
Authors
Advisor(s)
Abstract(s)
A execução de um programa de Webassembly numa máquina cliente implica o
descarregamento do código do servidor. Isto significa que qualquer alteração que o cliente
pretenda fazer no código deve ser feita diretamente no código compilado. Estas
transformações podem ser motivadas por diversas razões, tais como: reparação imediata de
erros/problemas encontrados em produção, neutralização de código potencialmente
malicioso, melhorias de desempenho, etc.
Outras aplicações de transformações diretas de código binário Webassembly noutros
contextos incluem a instrumentação do código, a geração de um conjunto de variações a
partir do mesmo código binário, por exemplo, com variações otimizadas para diferentes
arquiteturas (no cliente ou servidor) – sem recompilação do programa, uma vez que existe
sempre a versão base (compilada a partir do código fonte), e um conjunto de versões
relativas às variações - ou a monitorização do desempenho das atividades realizadas pelo
programa.
Com isto, o trabalho desenvolvido neste documento consiste numa ferramenta para
manipulação de código WebAssembly que permite a realização de pesquisas no código, e a
sua substituição por um conjunto de instruções definidas pelo programador. A ferramenta
tem o nome de WasmManipulator e seguirá uma abordagem orientada a aspetos para
alcançar a flexibilidade e simplicidade pretendidas. Para além disso, dado que rotinas de
Webassembly podem ser fortemente interdependentes do código JavaScript que as usa, a
ferramenta possui determinadas funcionalidades que permitem tirar partido e explorar essa
dependência. Isto inclui a definição de tipos adicionais no código WASM, e
interpretação/execução de expressões em tempo de execução.
O WasmManipulator foi desenvolvido com recurso à linguagem Go, e recorreu a outras
tecnologias e ferramentas para se auxiliar no seu desenvolvimento, tais como, YAML,
WABT e Comby. Para implementar o módulo JavaScript utilizou-se o TypeScript, que
juntamente com o GulpJS, geraram o respetivo código.
Com a implementação de todos os requisitos estabelecidos para a ferramenta, validados
através da utilização de cenários de uso típicos em código disponível publicamente, dão-se
por atingidos os objetivos previstos para a ferramenta.
Description
Keywords
WebAssembly JavaScript Aspetos Aplicações Web Transformação binária Instrumentação