Байт-код в исходный код Java

Можно ли преобразовать файл .class файл .java?

Как это может быть сделано?

Как насчет правильности кода, извлеченного из этой опции?

Ответы

Ответ 1

Это возможно. Для этого нужен Java Decompiler.

В основном вы найдете удивительно хорошую работу. То, что вы получите, является допустимым .java файлом, который будет скомпилирован в файл .class, но этот файл .java не обязательно будет таким же, как исходный исходный код. Такие вещи, как конструкции цикла, могут возникать по-разному, и все, что компилирует время, например, дженериков и аннотаций, не будет воссоздано.

У вас может возникнуть проблема, если код был запутан. Это процесс, который изменяет файлы классов, чтобы затруднить их декомпиляцию. Например, имена классов и переменных изменяются, чтобы все были похожи, поэтому в итоге вы получите код типа aa.a(ab) вместо employee.setName(name), и очень сложно разобраться, что происходит.

Я помню, как это делал JAD, но я не думаю, что это активно поддерживается, поэтому он может не работать с никогда не версиями Ява. A Поиск Google для декомпилятора java даст вам много вариантов.

Ответ 3

Это возможно с помощью одного из доступных декомпиляторов Java. Поскольку вы работаете с байт-кодом, который может быть оптимизирован компилятором (вставка статических переменных, реорганизация потока управления и т.д.), То, что вы получаете, может быть не совсем таким же, как исходный код, но он будет функционально эквивалентен.

Ответ 4

Добавление к предыдущим ответам: недавно появилась новая волна декомпиляторов, а именно Procyon, CFR, JD, Fernflower

Вот список современных декомпиляторов по состоянию на март 2015 года:

  • Процион
  • CFR
  • JD
  • Fernflower

Вы можете протестировать выше упоминание декомпиляторов онлайн, не требуется установка и сделать свой собственный образованный выбор. декомпиляторы Java в облаке: http://www.javadecompilers.com/

Ответ 5

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

Ответ 6

Это всегда возможно. Найдите "jass disassembler".

Но комментарии исходного кода и временные переменные не будут доступны.

Если вы декомпилируете класс и видите, что код слишком сложный с именами переменных, а имена методов похожи на a, b, c..., это означает, что проект запутан.

Ответ 7

Не совсем декомпилятор, но JDK содержит javap, дизассемблер:

javap -c org.example.MyClass

В зависимости от вашей учетной записи вам может быть интересно узнать или использовать.

Обратите внимание, что результаты декомпиляции файла класса зависят от включенной информации в файле класса. Если я правильно помню, включал отладочную информацию (видеть -g флаг javac), особенно для обозначения переменных и т.п.

Ответ 8

Я использую JAD, но позже переключился на другой, что, на мой взгляд, лучше - здесь

Ответ 9

DJ - это простой в использовании java decompiler. Просто откройте любой файл .class, и он покажет вам его код java.

Кроме того, вы можете использовать jadClipse плагин для eclipse, чтобы напрямую декомпилировать .class в .java

What about the correctness of the code extracted from this option?
В любом случае код, который будет сгенерирован любым декомпилятором java, не будет таким же, как и в оригинальном классе java. Поскольку он просто декодирует байт-код в java-код. Единственное, что вы можете быть уверены, это то, что результат будет таким же, как и исходный код Java.

Ответ 10

Вам нужен декомпилятор. www.Decompiler.com - хороший онлайн-декомпилятор.