Désassembleur WebAssembly
Convertissez un binaire .wasm en texte WAT lisible, validez-le et listez ses sections, imports, exports et fonctions, dans votre navigateur et sans l'exécuter.
Le module est seulement lu et converti en texte : il n’est jamais compilé, instancié ni exécuté.
- Taille
- –
- Fonctions
- –
- Imports
- –
- Exports
- –
- Types
- –
- Mémoires
- –
- Tables
- –
- Globales
- –
Sections
| Section | Position | Taille | Entrées |
|---|
Imports
| Module | Nom | Type | Détails |
|---|
Exports
| Nom | Type | Index |
|---|
Comment convertir un fichier WASM en WAT
- Déposez un fichier
.wasmdans la zone prévue ou cliquez dessus pour le choisir (20 Mo au maximum). Vous pouvez aussi cliquer sur Charger un module d’exemple pour voir une petite démonstration. - L’outil contrôle le binaire, le valide et affiche le résultat : ✓ Le module est valide., ou la raison pour laquelle il ne l’est pas.
- Consultez les compteurs : Fonctions (importées et définies), Imports, Exports, Types, Mémoires, Tables et Globales.
- Lisez le désassemblage dans Format texte WebAssembly (WAT), puis cliquez sur Copier ou Télécharger le .wat.
- Ajustez l’affichage avec les options Utiliser les noms de la section name, Expressions imbriquées (S-expressions) et Exports en ligne.
- Ouvrez les tableaux Sections, Imports et Exports pour voir la structure du fichier : chaque section avec sa position en octets, sa taille et son nombre d’entrées.
Le module n’est jamais compilé, instancié ni exécuté. L’outil se contente de lire ses octets et de les traduire en texte : vous pouvez donc examiner sans risque un fichier dont vous ignorez la provenance.
Ce que montre le texte WAT
WebAssembly existe sous deux formes équivalentes : le binaire compact .wasm, que chargent les navigateurs et les environnements d’exécution, et le format texte .wat, destiné aux humains. Le désassembleur affiche toutes les parties du module sous forme de texte : types de fonctions, imports, corps des fonctions, tables, mémoires, globales, exports, fonction de démarrage, segments d’éléments et segments de données.
Par défaut, les instructions sont listées une par ligne, dans l’ordre de la pile, comme elles sont stockées :
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Avec Expressions imbriquées (S-expressions), les opérandes sont placés à l’intérieur de l’instruction qui les utilise, comme (i32.add (local.get $a) (local.get $b)), ce qui se lit souvent plus facilement. Exports en ligne écrit (export "add") directement dans la fonction au lieu d’une liste séparée.
Noms, informations de débogage et validation
Un fichier .wasm désigne tout par des index. Si le compilateur a conservé une section personnalisée name (fréquent dans les builds de débogage), Utiliser les noms de la section name affiche les noms d’origine, comme $factorial. Sinon, wabt génère des noms comme $f2 ou $t0 pour garder le texte lisible. Les builds de production sont souvent dépouillés de leurs noms : un module minifié n’affichera que des noms générés.
La validation suit la spécification WebAssembly : les types doivent correspondre sur la pile d’opérandes, les index doivent exister, etc. Un module invalide est tout de même désassemblé si sa structure est lisible, avec l’erreur de validation à côté, ce qui aide à déboguer un compilateur ou un binaire écrit à la main. Les extensions postérieures à la première version (SIMD, threads, opérations mémoire en bloc, types référence, valeurs multiples, appels terminaux, exceptions, memory64, ramasse-miettes) sont activées en lecture.
Cet outil s’appuie sur wabt.js, la version JavaScript du WebAssembly Binary Toolkit (wasm2wat), chargée uniquement à l’ouverture d’un fichier.
Questions fréquentes
Puis-je retrouver le code source C, C++ ou Rust ?
Non. Le WAT est une forme lisible du binaire compilé, pas un décompilateur : le code source, les commentaires et la plupart des informations de type disparaissent à la compilation. Les noms de fonctions ne subsistent que si la section name a été conservée.
Mon fichier est-il envoyé quelque part ?
Non. Le fichier est lu et désassemblé dans votre navigateur ; rien n’est transmis à un serveur.
Pourquoi l'outil indique-t-il que ce n'est pas un binaire WebAssembly ?
Tout module commence par les quatre octets \0asm suivis de la version 1. Un fichier au contenu différent, compressé en gzip ou Brotli, ou un composant WebAssembly (le nouveau modèle de composants) sera refusé.
Pourquoi la zone de texte est-elle tronquée ?
Les très gros modules peuvent produire des millions de lignes. La zone de texte n’en montre que le début pour que la page reste fluide ; Télécharger le .wat enregistre le texte complet.
Puis-je exécuter ou tester le module ici ?
Non. Le module n’est volontairement jamais instancié, son code ne peut donc pas s’exécuter dans la page. Pour le tester, chargez-le dans votre propre projet ou dans un environnement comme wasmtime ou Node.js.
Outils similaires
- Explorateur d'AST JavaScript Collez du JavaScript et explorez son arbre syntaxique abstrait (ESTree, analysé par Acorn) dans le navigateur, puis exportez-le en JSON.
- Générateur de hash Calculez le hash MD5, SHA-1, SHA-256 ou SHA-512 d'un texte ou d'un fichier de toute taille et vérifiez une somme de contrôle, sans rien envoyer.
- Encodeur et décodeur Base64 Encodez et décodez du texte en Base64 en ligne, avec prise en charge complète de l'UTF-8 et option base64url. Tout se fait dans votre navigateur.