Перекомпилируйте декомпилированный исходный код Java (JD / JAD), содержащий инструкции goto - PullRequest
8 голосов
/ 10 января 2010

(Смежный вопрос: Компиляторы Java или языки JVM, поддерживающие goto? )

Я декомпилировал jar (юридически, для целей отладки) и хочу перекомпилировать его.

Я использовал JAD и JD , и оба не компилируются из-за инструкций goto

* 1013 Е.Г. *

      goto _L1

      ...
      L1: 
      return true;

Есть ли простой способ (или любой другой способ) перекомпилировать его? (За исключением ручного рефакторинга и удаления goto)

<Ч />

Ответы [ 4 ]

10 голосов
/ 10 января 2010

Нет, нет. В вашем случае, ни JD, ни JAD не смогли правильно декомпилировать файлы классов. Операторы «goto» являются подсказкой о фактическом ходе программы.

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

8 голосов
/ 25 февраля 2010

JAD - действительно потрясающий декомпилятор, у JD ... есть некоторые проблемы с операторами "try-catch-finally".

Вы пробовали декомпилятор Stiver (http://www.reversed -java.com / fernflower )?

Эммануэль, автор JD.

4 голосов
/ 10 января 2010

Все декомпиляторы ищут шаблоны кода, соответствующие конструкциям исходного кода Java, и выбирают источник, который подходит лучше всего.

Очевидно, что ваш код не соответствует ни одному шаблону, сохраненному в JAD или JD, поэтому вы получаете некомпилируемый исходный код Java. Скорее всего, это связано с тем, что JAD активно не разрабатывался в течение нескольких лет.

Я бы посоветовал вам взглянуть на проект Soot с гораздо более агрессивным декомпилятором.

http://www.sable.mcgill.ca/soot/

0 голосов
/ 21 августа 2015

Я бы порекомендовал современный декомпилятор - например, CFR или FernFlower!

Я выложил в сеть 6 декомпиляторов Java: Jadx, быстрый и с поддержкой Android, CFR (поддерживает Java 8), JDCore (очень быстрый), Procyon, Fernflower и JAD (очень быстрый, но устаревший).

Здесь можно использовать их без установки: http://www.javadecompilers.com/

...