Перекомпилировать декомпилированный исходный код Java (JD/JAD), содержащий инструкции перехода.
-
19-09-2019 - |
Вопрос
(Похожий вопрос: Компиляторы Java или языки JVM, поддерживающие goto?)
Я декомпилировал jar (юридически, в целях отладки) и хочу его перекомпилировать.
Я использовал оба ДЖАД и Джей Ди и оба не компилируются из-за инструкций перехода
Например.
goto _L1
...
L1:
return true;
Есть ли простой способ (или любой способ) его перекомпилировать?(За исключением ручного рефакторинга и удаления goto
х)
Решение
Нет, нет.В вашем случае ни JD, ни JAD не смогли правильно декомпилировать файлы классов.Операторы goto дают подсказку о реальном ходе выполнения программы.
Вы можете напрямую связаться с командой Java Decompiler, отправить файл класса, в котором декомпиляция приводит к недопустимому исходному коду, и спросить, является ли это ошибкой в текущей версии или функцией, которая еще не реализована.
Другие советы
JAD — действительно потрясающий декомпилятор, JD…есть некоторые проблемы с операторами «try-catch-finally».
Вы пробовали декомпилятор Stiver (http://www.reversed-java.com/fernflower) ?
Эммануэль, автор книги JD.
Все декомпиляторы ищут шаблоны кода, соответствующие конструкциям исходного кода Java, и выбирают источник, который подходит лучше всего.
Судя по всему, ваш код не соответствует никакому шаблону, хранящемуся в JAD или JD, поэтому вы получаете некомпилируемый исходный код Java.Скорее всего, это связано с тем, что JAD активно не разрабатывался в течение нескольких лет.
Я бы посоветовал вам взглянуть на проект Soot, у которого гораздо более агрессивный декомпилятор.
Я бы порекомендовал современный декомпилятор — например, CFR или FernFlower!
Я выложил в сеть 6 декомпиляторов Java:Jadx, быстрый и с поддержкой Android, CFR (поддерживает Java 8), JDCore (очень быстрый), Procyon, Fernflower и JAD (очень быстрый, но устаревший).
Их можно использовать без установки здесь: http://www.javadecompilers.com/