Aller au contenu

WABT - Boîte à outils binaires WebAssembly

WABT - Boîte à outils binaires WebAssembly

WABT (prononcé « wabbit ») est le Web Assembly Binary Toolkit de référence — une suite d’outils en ligne de commande pour travailler avec wasm à bas niveau. Il convertit entre le format binaire .wasm et le format texte lisible .wat (WebAssembly Text), désassemble et vide les modules, les valide, produit une décompilation de type C et interprète/exécute wasm. C’est la boîte à outils fondamentale pour le développement wasm et l’ingénierie inverse.

Installation

PlateformeCommande
macOS (Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
Depuis la sourceconstruire avec CMake à partir du dépôt WebAssembly/wabt
Vérifierwat2wasm --version

Les outils principaux

OutilConvertit / fait
wat2wasmTexte .wat → binaire .wasm
wasm2watBinaire .wasm → texte .wat (désassembler)
wasm-objdumpVider les sections, opcodes, symboles
wasm-decompileProduire du pseudocode lisible de type C
wasm-validateValider un module
wasm-interpInterpréter/exécuter un module (machine à pile)
wasm2cConvertir wasm → source C
wasm-stripSupprimer les sections (par ex. noms) d’un module

Texte ↔ Binaire

# 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
OptionEffet
-o FILEFichier de sortie
--generate-namesSynthétiser les noms pour les funcs/locales non nommées
--enable-FEATUREActiver une proposition wasm (par ex. --enable-threads)
-vVerbose

Inspecting a Module (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)
DrapeauAffiche
-hEn-têtes de section
-xDétails de toutes les sections
-dCorps de fonction désassemblés
-sContenu brut de la section
-j SECTIONLimiter à une section

Décompilation (sortie lisible)

# C-like decompilation — much easier to read than WAT
wasm-decompile module.wasm -o module.dcmp

wasm-decompile reconstruit le flux de contrôle structuré et les locales typées, ce qui en fait un moyen rapide de comprendre ce qu’un module fait lors du triage.

Valider et exécuter

CommandeObjectif
wasm-validate module.wasmConfirmer que le module est bien formé
wasm-interp module.wasm --run-all-exportsExécuter les fonctions exportées
wasm2c module.wasm -o module.cÉmettre C pour compilation/analyse

Flux de travail d’ingénierie inverse

# 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

Drapeaux de caractéristiques (Propositions)

DrapeauActive
--enable-threadsThreads/atomics
--enable-simdSIMD
--enable-bulk-memoryOpérations de mémoire en masse
--enable-reference-typesTypes de référence
--enable-allToutes les propositions supportées

Utilisez-les quand un module utilise des fonctionnalités wasm plus récentes et que les outils par défaut la rejettent.

WABT vs outils associés

OutilRôle
WABTConvertir/inspecter/valider/décompiler wasm
diswasmDécompilateur pseudocode de haut niveau
wasm-toolsManipulation bas niveau Rust
BinaryenBoîte à outils compilateur/optimiseur (wasm-dis, wasm-opt)

Ressources