2010-01-10 2 views
8

(Относящийся вопрос: Java compilers or JVM languages that support goto?)Рекомпилированные декомпилирован Java (JD/JAD) источник, содержащий GOTO инструкция

Я декомпилирован банка (юридически, для отладки) и хочет перекомпилировать.

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

Э.Г.

 goto _L1 

     ... 
     L1: 
     return true; 

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


+0

Это можно реализовать 'goto' использование исключений, но это не было бы довольно. Некоторые другие читы собраны здесь: http://stackoverflow.com/questions/2430782/alternative-to-goto-statement-in-java – BRFennPocock

+0

Как насчет того, чтобы вы просто заменили 'goto L1' на' return true; '? :) – fredoverflow

ответ

10

Нет, нет. В вашем случае ни JD, ни JAD не смогли правильно декомпилировать файлы классов. Операторы 'goto' - это подсказка о реальном потоке программы.

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

3

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

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

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

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

8

JAD это действительно удивительно декомпилятор, JD ... есть некоторые проблемы с "Try-всеобъемлющая наконец" заявления.

Попробуйте декомпилятор Stiver (http://www.reversed-java.com/fernflower)?

Emmanuel, автор JD.

+2

Просто попробовал JM Emmanuel, работает как шарм. –

0

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

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

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

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