2009-07-19 22 views
12

Digamos que tengo:explorar y pitón descompilación de código de bytes

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

Ahora, quiero explorar vea cómo prueba se parece en su forma compilada.

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

puedo conseguir el desensamblado, utilizando 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 código abierto y mantenido decompilador que podría utilizar para convertir el código de bytes de nuevo en código Python se puede leer?

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

Respuesta

3

decompyle

Decompyle es un desensamblador pitón y decompilador que convierte Python byte de código (.pyc o .pyo) de nuevo en fuente Python equivalente. La verificación del código producido (compilada nuevamente) es disponible también.

+1

Sí. Para python 2.3, ¿se puede usar cualquier cosa con Python 2.5+? –

7

UnPyc

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

Es un tenedor mantenido de la antigua decompyle actualizado para trabajar con 2,5 y 2,6.

+5

Del archivo readme.txt del proyecto: "D - decompilar (aún no implementado)". Entonces no, este es un pobre sustituto de decompyle. – Cerin

2

Uncompyle2 funcionó para mí con Python 2.7.

https://github.com/wibiti/uncompyle2

rápida cómo utilizar uncompyle2, lo instale y se

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

que va a generar el código fuente de vuelta en decompile.py

1

Además de lo que escribió DevC:

  1. Uncompyle2 funciona con Python 2.7

  2. con Uncompyle2, también puede des-compilar desde la línea de comandos:

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

  3. instalar Uncompyle2, hacer

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

    $ cd uncompyle2

    $ sudo ./setup.py instalar

1

También hay ahora 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.

Cuestiones relacionadas