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?

13
demandé sur Otto Allmendinger 2009-07-19 12:59:47

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.

7
répondu 2009-07-19 10:08:08

obtenez uncompyle2 de github! :)

6
répondu nokarmawhore 2012-06-19 14:06:44

decompyle

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.

3
répondu Shay Erlichmen 2009-07-19 09:06:57

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

2
répondu DevC 2013-10-09 09:56:57

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.

2
répondu rocky 2016-05-25 14:50:35

en plus de ce que DevC a écrit:

  1. Uncompyle2 fonctionne avec Python 2.7

  2. avec Uncompyle2, vous pouvez également dé-compiler à partir de la ligne de commande:

    $ uncompyle2 compilé.pyc >> source.uncompyle2.py

  3. pour installer Uncompyle2, do

    $ git clone https://github.com/wibiti/uncompyle2

    $ cd uncompyle2

    $ sudo ./setup.py installer

1
répondu Maxim 2014-01-26 16:30:29