
Désassembleur et décompilateur de bytecode Python en C++
Un désassembleur/décompilateur de byte-code Python
Decompyle++ vise à traduire le byte-code Python compilé en code source Python valide et lisible par l'homme. Bien que d'autres projets aient réalisé cela avec plus ou moins de succès, Decompyle++ est unique en ce qu'il cherche à prendre en charge le byte-code de n'importe quelle version de Python.
Decompyle++ inclut à la fois un désassembleur de byte-code (pycdas) et un décompilateur (pycdc).
Comme son nom l'indique, Decompyle++ est écrit en C++. Si vous souhaitez contribuer, veuillez forker notre dépôt sur github à l'adresse https://github.com/zrax/pycdc
Générer un projet ou un makefile avec CMake (Voir la documentation de CMake pour les détails)
Les options suivantes peuvent être passées à CMake pour contrôler les fonctionnalités de débogage :
| Option | Description |
|---|---|
-DCMAKE_BUILD_TYPE=Debug | Produire des symboles de débogage |
-DENABLE_BLOCK_DEBUG=ON | Activer la sortie de débogage par blocs |
-DENABLE_STACK_DEBUG=ON | Activer la sortie de débogage de la pile |
Compiler le projet ou le makefile généré
makemake check JOBS=4 (optionnellement FILTER=xxxx pour n'exécuter que certains tests)Pour exécuter pycdas, le désassembleur PYC :
./pycdas [PATH TO PYC FILE]
Le désassemblage du byte-code est imprimé sur stdout.
Pour exécuter pycdc, le décompilateur PYC :
./pycdc [PATH TO PYC FILE]
Le code source Python décompilé est imprimé sur stdout.
Les erreurs sont imprimées sur stderr.
Objets de code marshallés :
Les deux outils prennent en charge les objets de code marshallés de Python, tels que produits par marshal.dumps(compile(...)).
Pour utiliser cette fonctionnalité, spécifiez -c -v <version> en ligne de commande - la version doit être spécifiée car les objets eux-mêmes ne contiennent pas de métadonnées de version.
Decompyle++ est l'œuvre de Michael Hansen et Darryl Pogue.
Contributions supplémentaires de :
Il est publié sous les termes de la GNU General Public License, version 3 ; voir le fichier LICENSE pour plus de détails.