Перекомпилируйте декомпилируемый Java (JD / JAD) источник, который содержит goto инструкции

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

Я декомпилировал банку (По закону, для отладки целей) и хочу перекомпилировать ее.

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

Например.

      goto _L1

      ...
      L1: 
      return true;

Существует ли простой способ (или какой-либо путь) для перекомпиляции его? (Кроме вручную осуществить рефакторинг и удалить goto)


8
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Нет, нет. В вашем случае ни JD, ни Jad не смогли разделить файлы классов правильно. Заявления «GOTO» - это намек на фактический поток программы.

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

10
ответ дан 5 December 2019 в 07:35
поделиться

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

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

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

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

4
ответ дан 5 December 2019 в 07:35
поделиться

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

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

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

8
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: