Pregunta Explorando y descompilando bytecode de python


Digamos que tengo:

>>> def test(a):    
>>>    print a

Ahora, quiero explorar cómo se ve la prueba en su forma compilada.

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'

Puedo obtener la forma desmontada usando el dis módulo:

>>> 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

¿Existe un descompilador de código abierto y mantenido que pueda usar para convertir el bytecode en un código python legible?

actualización: gracias por sugerir descompilar, pero está desactualizado (python2.3) y nadie lo mantiene más. ¿Hay algo para python2.5 o posterior? 


12
2017-07-19 08:59


origen


Respuestas:


UnPyc

http://sourceforge.net/projects/unpyc/

Es una bifurcación mantenida de la antigua descompila actualizada para trabajar con 2.5 y 2.6.


7
2017-07-19 10:00



obtener uncompyle2 de github! :)


6
2018-06-19 14:06



descompilar

Decompyle es un desensamblador de python y   descompilador que convierte Python   código de bytes (.pyc o .pyo) de nuevo en   fuente equivalente de Python. Verificación   del código producido (compilado nuevamente) es   disponible también


3
2017-07-19 09:06



Uncompyle2 funcionó para mí con Python 2.7.

https://github.com/wibiti/uncompyle2

Rápido cómo usar uncompyle2, instálalo y luego

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)

Generará código fuente en decompile.py


2
2017-10-09 09:56



Además de lo que DevC escribió:

  1. Uncompyle2 funciona con Python 2.7

  2. con Uncompyle2, también puede deshacer la compilación desde la línea de comando:

    $ uncompyle2 compiled.pyc >> source.uncompyle2.py

  3. para instalar Uncompyle2, hacer

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

    $ cd uncompyle2

    $ sudo ./setup.py install


1
2018-01-26 16:30



También ahora hay uncompyle6 que está escrito en Python y pycdc que está escrito en C ++.

Ambos manejan varias versiones del bytecode de Python, incluidas las versiones de Python 2 y Python 3.


1
2018-05-25 14:50