2016-03-01 1 views
4

Я искал и не нашел ничего, что могло бы помочь мне декомпилировать Python 3.5. Кто-нибудь знает об одном?Decompile Python 3.5 .pyc

+1

Привет, добро пожаловать в SO. Боюсь, что этот вопрос считается вне темы. Из правил сайта: «Вопросы, предлагающие нам рекомендовать или находить книгу, инструмент, библиотеку программного обеспечения, учебник или другой ресурс вне сайта, не соответствуют теме« Переполнение стека », поскольку они склонны привлекать упрямые ответы и спам.Вместо этого описать проблему и то, что было сделано до сих пор, чтобы ее решить ». Извините, но в свете этого я думаю, что этот вопрос будет закрыт. –

+0

@FabioTurati Я вижу довольно очевидное описание проблемы, если понимать слово «декомпилировать». Это не вопрос рекомендации конкретного инструмента, а решение идеального решения в идеальном случае наиболее стандартным способом. –

+0

@ PavelŠimerda Ну, ответы на один из них являются лишь рекомендательными инструментами. В любом случае, все это 2 года, и у меня есть несколько повышений. Я по-прежнему считаю, что мой оригинальный комментарий действителен, но я не буду предпринимать никаких действий. –

ответ

8

Те, которые я знаю о том, что ручка Python 3.5:

  1. uncompyle6
  2. pycdc

[Юридическая информация: Я разрабатываю 1]

uncompyle6 (написанный на Python) обрабатывает опкоды введенный в Python 3.5, в то время как pycdc (написанный на C++) по-прежнему немного отсутствует здесь. Но эти коды операций появляются только при использовании новых языковых функций Python 3.5. Таким образом, вероятность выполнения этого в pycdc может быть небольшим, если базовая программа работает с более ранними версиями Python.

Ситуация, однако, немного отличается для Python 3.6 и 3.7. Python 3.6 adds some function-call opcodes and changes the semantics of other opcodes. Таким образом, в отличие от 3.5, новые коды операций появляются даже с кодом, который не использует никаких новых функций, используемых в Python 3.5 или 3.6. Python 3.7, опять же, adds method opcodes и изменяет семантику других; и прямо сейчас pycdc не поддерживает это.

uncompyle6 обращается к некоторым из них, с подталкиванием различных отчетов об ошибках. И с введением 3.6 более часто появляются более новые коды и функции 3.5.

Ни один из декомпиляторов не справляется со всеми изменениями, но uncompyle6 на данный момент выполняет более тщательную работу. Вы можете посмотреть на трекеры проблемы по каждой из проблем, чтобы получить актуальное представление о том, что происходит.

У uncompyle6 есть проблемы с регулированием потока прямо в некоторых жестких случаях, но тогда и pycdc.

Итак, мое предложение, когда есть проблема с uncompyle6, заключается в использовании pycdc или, когда это возможно, сравнить результаты с этим.

+0

uncompyle6 просто спас мою задницу после ужасающей проблемы с моим ноутбуком, исказившим мой .py-файл, но .pyc появился чистым. Все кажется декомпилированным правильно! (Утверждение 'assert' стало' if not x raise AssertionError', но в остальном все хорошее) – andyhasit

+0

Am joy uncompyle6 помог. У него есть правила для утверждения assert, но, с другой стороны, любой декомпилятор должен быть удовлетворен тем, что он создает эквивалентный код, который, я думаю, здесь имеет место. Если это не так, тогда не стесняйтесь открывать проблему после прочтения сообщения об ошибке. И пока вы находитесь на github, рассмотрите возможность продвижения проекта. Хотя сейчас это самый высокий рейтинг (помимо realgud в группе realgud), я использую рейтинги, чтобы помочь мне решить, над каким проектом работать, когда есть выбор. И я отмечаю, что сейчас uncompyle6 занимает место за pycdc, которым я восхищаюсь. – rocky

+0

Я не уверен, что это классифицируется как ошибка, и не может быть никакого способа сказать из pyc, если был использован оператор assert. Направлено на github. – andyhasit

0

декомпилировать скомпилирован .pycpython3 файлов, я использовал uncompyle6 в моей текущей ОС Ubuntu следующим образом:

(я) Установка uncompyle6: PIP3 установить uncompyle6

(ii) Чтобы создать файл .py из файла .pyc Запуск: uncompyle6 -o. your_filename.pyc

(III) Автоматически новый файл .py будет создан с таким же именем существующего .pyc файла.

Надеюсь, это поможет.

Смежные вопросы