[памятка] CPython (де-)компиляции

Aug 21, 2010 21:55

 
так как Пайсон (CPython) это интепретатор... то много говорить о компиляции не приходится :-)

однако делается это так:

# компиляция:

$ python -m compileall ДИРЕКТОРИЯ # просто компиляция "по-обычному" :) $ python -O -m compileall ДИРЕКТОРИ # "-O" для применениея оптимизации $ python -m compileall -b ДИРЕКТОРИЯ # "-b" для "традиционного" компилирования, начиная с версии Python-3.2
вот так вот всё просто!! :-) :-) :-)

а что качается Python-3.2 -- то тут появилось нововведение PEP-3147 . и если ЦЕЛЬ компиляции заключается не в ускорении будущей программы, а для КОПИРАСТИЧЕСКИХ целей сокрития исходника -- то "традициднный режим" как раз будет кстате :-D

# декомпиляция:

чуть сложнее чем компиляция :-) :

>>> import marshal, dis >>> fd = open('ПУТЬ/К/ФАЙЛУ.pyc', 'rb') >>> magic = fd.read(8) >>> code = marshal.load(fd) >>> dis.dis(code) (на экран выводитсья результат в АССЕМБЛЕРО-виде... наподобие следущего текста...) 2 0 LOAD_CONST 1 (3) 3 STORE_FAST 0 (a) 3 6 LOAD_CONST 2 (4) 9 STORE_FAST 1 (b) 4 12 LOAD_FAST 0 (a) 15 LOAD_FAST 1 (b) 18 BINARY_ADD 19 STORE_FAST 2 (c) 22 LOAD_CONST 0 (None) 25 RETURN_VALUE
не очень прям супер ясно, но при желании понять суть можно :-)

# декомпиляция по человечески

программа Decompyle [ decompyle.sourceforge.net/ ] -- восстанавливает исходный код -- почти в том же виде в котором он изначально писался :-) :-D ..

.... ....однако кажется проект "слегка" устарел :-[ :-[ :-[ (что впринцепе не стоит воспринимать прям уж фатально :), так как есть/разрабатываются и другие проекты... :-) например UnPyc [ unpyc.sourceforge.net/ ] )

###

так-то!

Previous post Next post
Up