Explorer et décomposer le bytecode de python
disons que j'ai:
>>> def test(a):
>>> print a
maintenant, je veux explorer à quoi ressemble test dans sa forme compilée.
>>> test.func_code.co_code
'|x00x00GHdx00x00S'
je peux obtenir le formulaire démonté en utilisant le dis module:
>>> import dis
>>> dis.dis(test)
2 0 LOAD_FAST 0 (a)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
y a-t-il un décompileur opensource et maintenu que je pourrais utiliser pour transformer le bytecode en code Python lisible?
mise à jour: merci de suggérer décompiler, mais il est périmé (python2.3) et personne ne l'entretient plus. Y a-t-il quelque chose pour python2?5 ans ou plus?
6 réponses
UnPyc
http://sourceforge.net/projects/unpyc /
c'est une fourche entretenue de l'ancien décompyle mis à jour pour fonctionner avec 2.5 et 2.6.
Decompyle est un démonteur python et decompiler qui convertit Python byte-code (.pyc ou .pyo), dans source Python équivalente. Vérification du code produit (recompilé) est disponible aussi bien.
Uncompyle2 a fonctionné pour moi avec Python 2.7.
https://github.com/wibiti/uncompyle2
rapide comment utiliser uncompyle2, L'installer et puis
>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
... uncompyle2.uncompyle_file("compiled.pyc",f)
il générera le code source de retour dans decompile.py
il y a aussi maintenant uncompyle6 qui est écrit en Python et pycdc qui est écrit en C++.
ces deux versions gèrent plusieurs versions de Python bytecode dont les versions Python 2 et Python 3.
en plus de ce que DevC a écrit:
-
Uncompyle2 fonctionne avec Python 2.7
-
avec Uncompyle2, vous pouvez également dé-compiler à partir de la ligne de commande:
$ uncompyle2 compilé.pyc >> source.uncompyle2.py
-
pour installer Uncompyle2, do
$ git clone https://github.com/wibiti/uncompyle2
$ cd uncompyle2
$ sudo ./setup.py installer