Ответ 1
UnPyc
http://sourceforge.net/projects/unpyc/
Это обновленная вилка старого декомпиля, обновленная для работы с 2.5 и 2.6.
Допустим, у меня есть:
>>> 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 или новее?
UnPyc
http://sourceforge.net/projects/unpyc/
Это обновленная вилка старого декомпиля, обновленная для работы с 2.5 и 2.6.
получить uncompyle2 от github!:)
Decompyle - это дизассемблер python и декомпилятор, который преобразует Python байт-код (.pyc или .pyo) обратно в эквивалентный источник Python. верификация полученного кода (перекомпилированного) является также доступны.
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
В дополнение к тому, что 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
Также существует uncompyle6, который написан на Python и pycdc, который написан на С++.
Оба из них обрабатывают несколько версий байт-кода Python, включая версии Python 2 и версии Python 3.