2009-07-19 7 views
12

Können sagen, ich habe:Exploring und decompiling Python-Bytecode

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

Nun, ich möchte sehen, erforschen, wie Test wie in seiner kompilierter Form aussieht.

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

Ich kann die zerlegten Form erhalten mit dem dis Modul:

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

Gibt es eine Open-Source und gepflegt Decompiler ich konnte den Bytecode wieder in lesbare Python-Code zu verwandeln?

update: danke für den Vorschlag dekompilieren, aber es ist veraltet (Python2.3) und niemand hält es mehr. Gibt es etwas für python2.5 oder später?

Antwort

3

decompyle

Decompyle ist ein Python Disassembler und decompiler die Bytecode Python konvertiert (.pyc oder .pyo) zurück in äquivalente Python Quelle. Verifizierung des produzierten Codes (neu kompiliert) ist ebenfalls verfügbar.

+1

Ja. Für Python 2.3, alles mit Python 2.5+ verwendbar? –

7

UnPyc

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

Es ist eine gepflegte Gabel des alten decompyle aktualisiert mit 2.5 und 2.6 zu arbeiten.

+5

Aus der Datei readme.txt des Projekts: "D - dekompilieren (noch nicht implementiert)". Also nein, das ist ein schlechter Ersatz für die Dekompilierung. – Cerin

2

Uncompyle2 arbeitete für mich mit Python 2.7.

https://github.com/wibiti/uncompyle2

Schnell wie uncompyle2 zu verwenden, es installieren und dann

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

Es wird Quellcode zurück in decompile.py

1

Zusätzlich zu erzeugen, was DEVC schrieb:

  1. Uncompyle2 arbeitet mit Python 2.7

  2. mit Uncompyle2, können Sie auch un-kompilieren von der Kommandozeile:

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

  3. Uncompyle2 zu installieren, gehen Sie

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

    $ cd uncompyle2

    $ sudo ./setup.py installieren

1

Es gibt auch jetzt ist uncompyle6, die in Python geschrieben und pycdc, die in C++ geschrieben ist.

Beide behandeln mehrere Versionen von Python-Bytecode einschließlich Python 2-Versionen und Python 3-Versionen.

Verwandte Themen