
C++ дизассемблер и декомпилятор байт-кода python
Дисассемблер/Декомпилятор байт-кода Python
Decompyle++ нацелен на преобразование скомпилированного байт-кода Python обратно в корректный и человекочитаемый исходный код Python. В то время как другие проекты достигали этого с разной степенью успеха, Decompyle++ уникален тем, что стремится поддерживать байт-код любой версии Python.
Decompyle++ включает как дисассемблер байт-кода (pycdas), так и декомпилятор (pycdc).
Как следует из названия, Decompyle++ написан на C++. Если вы хотите внести свой вклад, пожалуйста, сделайте форк на github по адресу https://github.com/zrax/pycdc
Создайте проект или makefile с помощью CMake (см. документацию CMake для подробностей)
Следующие опции могут быть переданы CMake для управления отладочными функциями:
| Option | Описание |
|---|---|
-DCMAKE_BUILD_TYPE=Debug | Создание отладочных символов |
-DENABLE_BLOCK_DEBUG=ON | Включить отладочный вывод блоков |
-DENABLE_STACK_DEBUG=ON | Включить отладочный вывод стека |
Соберите созданный проект или makefile
makemake check JOBS=4 (опционально
FILTER=xxxx для запуска только определённых тестов)Для запуска pycdas, дисассемблера PYC:
./pycdas [ПУТЬ К PYC ФАЙЛУ]
Дисассемблированный байт-код выводится в stdout.
Для запуска pycdc, декомпилятора PYC:
./pycdc [ПУТЬ К PYC ФАЙЛУ]
Декомпилированный исходный код Python выводится в stdout.
Любые ошибки выводятся в stderr.
Marshalled объекты кода:
Оба инструмента поддерживают marshalled объекты кода Python, получаемые из marshal.dumps(compile(...)).
Чтобы использовать эту функцию, укажите -c -v <version> в командной строке — версию необходимо указать, так как сами объекты не содержат метаданных о версии.
Decompyle++ — работа Michael Hansen и Darryl Pogue.
Дополнительные вклады от:
Выпущен под условиями Стандартной общественной лицензии GNU, версия 3; Смотрите файл LICENSE для подробностей.