Подтвердить что ты не робот

Изучение и декомпиляция байт-кода python

Допустим, у меня есть:

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

Теперь я хочу изучить, как выглядит тест в его скомпилированной форме.

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

Я могу получить дизассемблированную форму с помощью модуля dis:

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

Есть ли открывающий и поддерживаемый декомпилятор, который я мог бы использовать, чтобы вернуть байт-код обратно в читаемый код python?

update: спасибо за предложение декомпилировать, но он устарел (python2.3), и никто больше его не поддерживает. Есть ли что-нибудь для python2.5 или новее?

4b9b3361

Ответ 1

UnPyc

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

Это обновленная вилка старого декомпиля, обновленная для работы с 2.5 и 2.6.

Ответ 2

получить uncompyle2 от github!:)

Ответ 3

decompyle

Decompyle - это дизассемблер python и декомпилятор, который преобразует Python байт-код (.pyc или .pyo) обратно в эквивалентный источник Python. верификация полученного кода (перекомпилированного) является также доступны.

Ответ 4

Uncompyle2 работал у меня с Python 2.7.

https://github.com/wibiti/uncompyle2

Быстро, как использовать uncompyle2, установить его, а затем

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

Он будет генерировать исходный код обратно в файле decompile.py

Ответ 5

В дополнение к тому, что DevC написал:

  • Uncompyle2 работает с Python 2.7

  • с Uncompyle2, вы также можете скомпилировать из командной строки:

    $uncompyle2 compiled.pyc → source.uncompyle2.py

  • для установки Uncompyle2, do

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

    $cd uncompyle2

    $sudo./setup.py install

Ответ 6

Также существует uncompyle6, который написан на Python и pycdc, который написан на С++.

Оба из них обрабатывают несколько версий байт-кода Python, включая версии Python 2 и версии Python 3.