WABT - Kit de Ferramentas Binário WebAssembly Cheatsheet
WABT (pronunciado “wabbit”) é o Kit de Ferramentas Binário WebAssembly de referência — um pacote de ferramentas de linha de comando para trabalhar com wasm em baixo nível. Converte entre o formato binário .wasm e o formato de texto legível por humanos .wat, desassentar e despeja módulos, valida-os, produz uma descompilação semelhante a C e interpreta/executa wasm. É a caixa de ferramentas fundamental para desenvolvimento e engenharia reversa wasm.
Instalação
| Plataforma | Comando |
|---|
| macOS (Homebrew) | brew install wabt |
| Debian/Ubuntu | sudo apt install wabt |
| Arch Linux | sudo pacman -S wabt |
| npm | npm install -g wabt |
| From source | compilar com CMake do repositório WebAssembly/wabt |
| Verify | wat2wasm --version |
As Ferramentas Principais
| Ferramenta | Converte / faz |
|---|
wat2wasm | Text .wat → binário .wasm |
wasm2wat | Binário .wasm → texto .wat (desassemblar) |
wasm-objdump | Despeja seções, opcodes, símbolos |
wasm-decompile | Produz pseudocódigo legível semelhante a C |
wasm-validate | Validar um módulo |
wasm-interp | Interpretar/executar um módulo (máquina de pilha) |
wasm2c | Converter wasm → código fonte C |
wasm-strip | Remover seções (ex. nomes) de um módulo |
Texto ↔ Binário
# Assemble text to binary
wat2wasm module.wat -o module.wasm
# Disassemble binary to text (the RE starting point)
wasm2wat module.wasm -o module.wat
# Keep debug names / custom sections while disassembling
wasm2wat --generate-names module.wasm
| Opção | Efeito |
|---|
-o FILE | Arquivo de saída |
--generate-names | Sintetize nomes para funcs/locais sem nome |
--enable-FEATURE | Ativar uma proposta wasm (ex. --enable-threads) |
-v | Verbose |
Inspecionando um Módulo (objdump)
# Full section + disassembly dump
wasm-objdump -x module.wasm # headers/sections
wasm-objdump -d module.wasm # disassemble code
wasm-objdump -s module.wasm # section contents (hex)
| Flag | Mostra |
|---|
-h | Cabeçalhos de seção |
-x | Detalhes de todas as seções |
-d | Corpos de função desassemblados |
-s | Conteúdo de seção bruto |
-j SECTION | Limitar a uma seção |
Descompilando (Saída Legível)
# C-like decompilation — much easier to read than WAT
wasm-decompile module.wasm -o module.dcmp
wasm-decompile reconstrói fluxo de controle estruturado e locais digitados, tornando uma maneira rápida de entender o que um módulo faz durante triagem.
Validar e Executar
| Comando | Propósito |
|---|
wasm-validate module.wasm | Confirme que o módulo está bem formado |
wasm-interp module.wasm --run-all-exports | Executar funções exportadas |
wasm2c module.wasm -o module.c | Emitir C para compilação/análise |
Fluxo de Trabalho de Engenharia Reversa
# 1) Disassemble with names
wasm2wat --generate-names target.wasm -o target.wat
# 2) Dump imports/exports to understand capabilities
wasm-objdump -x target.wasm | grep -E "import|export"
# 3) Get readable pseudocode
wasm-decompile target.wasm -o target.dcmp
# 4) Hunt for strings/URLs in data sections
wasm-objdump -s target.wasm | less
Flags de Recurso (Propostas)
| Flag | Habilita |
|---|
--enable-threads | Threads/atomics |
--enable-simd | SIMD |
--enable-bulk-memory | Operações de memória em massa |
--enable-reference-types | Tipos de referência |
--enable-all | Todas as propostas suportadas |
Use esses quando um módulo usa recursos wasm mais novos e as ferramentas padrão os rejeitam.
WABT vs Ferramentas Relacionadas
| Ferramenta | Função |
|---|
| WABT | Converter/inspecionar/validar/descompilar wasm |
| diswasm | Decompilador pseudocódigo de nível superior |
| wasm-tools | Manipulação de baixo nível Rust |
| Binaryen | Cadeia de ferramentas compilador/otimizador (wasm-dis, wasm-opt) |
Recursos