Ir al contenido

WABT - Kit de herramientas binarias de WebAssembly

WABT - Kit de herramientas binarias de WebAssembly

WABT (pronunciado “wabbit”) es el Kit de herramientas binarias de WebAssembly de referencia — un conjunto de herramientas de línea de comandos para trabajar con wasm a bajo nivel. Convierte entre el formato binario .wasm y el formato de texto legible por humanos .wat, desensambla y descarga módulos, los valida, produce una descompilación similar a C e interpreta/ejecuta wasm. Es la caja de herramientas fundamental tanto para el desarrollo de wasm como para la ingeniería inversa.

Instalación

PlataformaComando
macOS (Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
Desde fuentecompilar con CMake desde el repositorio de WebAssembly/wabt
Verificarwat2wasm --version

Las herramientas principales

HerramientaConvierte / hace
wat2wasmTexto .wat → binario .wasm
wasm2watBinario .wasm → texto .wat (desensambia)
wasm-objdumpDescarga secciones, opcodes, símbolos
wasm-decompileProduce pseudocódigo legible similar a C
wasm-validateValida un módulo
wasm-interpInterpreta/ejecuta un módulo (máquina de pila)
wasm2cConvierte wasm → código fuente C
wasm-stripElimina secciones (por ejemplo nombres) de un módulo

Texto ↔ Binario

# Ensambla texto a binario
wat2wasm module.wat -o module.wasm

# Desensambia binario a texto (el punto de partida de la ingeniería inversa)
wasm2wat module.wasm -o module.wat

# Mantén nombres de depuración / secciones personalizadas mientras desensamblias
wasm2wat --generate-names module.wasm
OpciónEfecto
-o FILEArchivo de salida
--generate-namesSintetiza nombres para funciones/locales sin nombre
--enable-FEATUREActiva una propuesta de wasm (por ejemplo --enable-threads)
-vDetallado

Inspeccionar un módulo (objdump)

# Volcado completo de sección + desasambly
wasm-objdump -x module.wasm      # encabezados/secciones
wasm-objdump -d module.wasm      # desensambia código
wasm-objdump -s module.wasm      # contenidos de sección (hex)
BanderaMuestra
-hEncabezados de sección
-xDetalles de todas las secciones
-dCuerpos de funciones desensambados
-sContenidos de sección sin procesar
-j SECTIONLimita a una sección

Descompilación (salida legible)

# Descompilación similar a C — mucho más fácil de leer que WAT
wasm-decompile module.wasm -o module.dcmp

wasm-decompile reconstruye el flujo de control estructurado y locales tipados, lo que lo convierte en una forma rápida de entender qué hace un módulo durante el triaje.

Validar y ejecutar

ComandoPropósito
wasm-validate module.wasmConfirma que el módulo está bien formado
wasm-interp module.wasm --run-all-exportsEjecuta funciones exportadas
wasm2c module.wasm -o module.cEmite C para compilación/análisis

Flujo de trabajo de ingeniería inversa

# 1) Desensambia con nombres
wasm2wat --generate-names target.wasm -o target.wat

# 2) Descarga importaciones/exportaciones para entender capacidades
wasm-objdump -x target.wasm | grep -E "import|export"

# 3) Obtén pseudocódigo legible
wasm-decompile target.wasm -o target.dcmp

# 4) Busca strings/URLs en secciones de datos
wasm-objdump -s target.wasm | less

Banderas de características (Propuestas)

BanderaActiva
--enable-threadsThreads/atomics
--enable-simdSIMD
--enable-bulk-memoryOperaciones de memoria masiva
--enable-reference-typesTipos de referencia
--enable-allTodas las propuestas soportadas

Usa estas cuando un módulo use características wasm más nuevas y las herramientas predeterminadas las rechacen.

WABT vs herramientas relacionadas

HerramientaRol
WABTConvierte/inspecciona/valida/descompila wasm
diswasmDescompilador de pseudocódigo de nivel más alto
wasm-toolsManipulación Rust de bajo nivel
BinaryenConjunto de herramientas de compilador/optimizador (wasm-dis, wasm-opt)

Recursos