Pular para o conteúdo

WABT - Kit de Ferramentas Binário WebAssembly Cheatsheet

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

PlataformaComando
macOS (Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
From sourcecompilar com CMake do repositório WebAssembly/wabt
Verifywat2wasm --version

As Ferramentas Principais

FerramentaConverte / faz
wat2wasmText .wat → binário .wasm
wasm2watBinário .wasm → texto .wat (desassemblar)
wasm-objdumpDespeja seções, opcodes, símbolos
wasm-decompileProduz pseudocódigo legível semelhante a C
wasm-validateValidar um módulo
wasm-interpInterpretar/executar um módulo (máquina de pilha)
wasm2cConverter wasm → código fonte C
wasm-stripRemover 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çãoEfeito
-o FILEArquivo de saída
--generate-namesSintetize nomes para funcs/locais sem nome
--enable-FEATUREAtivar uma proposta wasm (ex. --enable-threads)
-vVerbose

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)
FlagMostra
-hCabeçalhos de seção
-xDetalhes de todas as seções
-dCorpos de função desassemblados
-sConteúdo de seção bruto
-j SECTIONLimitar 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

ComandoPropósito
wasm-validate module.wasmConfirme que o módulo está bem formado
wasm-interp module.wasm --run-all-exportsExecutar funções exportadas
wasm2c module.wasm -o module.cEmitir 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)

FlagHabilita
--enable-threadsThreads/atomics
--enable-simdSIMD
--enable-bulk-memoryOperações de memória em massa
--enable-reference-typesTipos de referência
--enable-allTodas 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

FerramentaFunção
WABTConverter/inspecionar/validar/descompilar wasm
diswasmDecompilador pseudocódigo de nível superior
wasm-toolsManipulação de baixo nível Rust
BinaryenCadeia de ferramentas compilador/otimizador (wasm-dis, wasm-opt)

Recursos