Какую программу я могу использовать для декомпиляции файла класса? Я действительно получу код Java, или это просто ассемблерный код JVM?
На вопросы о производительности Java на этом сайте я часто вижу ответы от людей, которые "декомпилировали" файл класса Java, чтобы увидеть, как компилятор оптимизирует определенные вещи.
самый популярный декомпилятор Java, но преимущественно только этого возраста. Написан на C ++, поэтому очень быстрый. Устарел, не поддерживается и некорректно декомпилирует Java 5 и более поздних версий.
Таким образом, ваш пробег может отличаться в зависимости от последних версий jdk (7, 8).
На том же сайте перечислены другие инструменты.
А javadecompiler, как отметил Сальвадор Валенсия в комментариях (сентябрь 2017 г.), предлагает SaaS, при котором вы загружаете .class файл в облако, и он возвращает вам декомпилированный код.
Оригинальный ответ: октябрь 2008 г.
Финальный выпуск JSR 176, определяющий основные функции J2SE 5.0 (Java SE 5), был опубликован 30 сентября 2004 года.
Последней версией Java, поддерживаемой JAD, известным Java-декомпилятором, написанным г-ном Павлом Кузнецовым, является JDK 1.3.
Большинство декомпиляторов Java, загружаемых сегодня из Интернета, таких как “DJ Java Decompiler“ или ”Cavaj Java Decompiler", работают на JAD: они не могут отображать исходные тексты Java 5.
Явная поддержка декомпиляции и анализа Java 5+ файлов ”.class".
Приятный графический интерфейс:
Работает с компиляторами от JDK 1.1.8 до JDK 1.7.0 и другими (Jikes, JRockit и др.).
Он имеет онлайн-демонстрационную версию, которая на самом деле полностью функциональна! Вы можете просто поместить jar-файл на страницу и просмотреть декомпилированный исходный код, ничего не устанавливая.
Ответ 2
Существует несколько декомпиляторов... Быстрый поиск выдает:
Procyon: с открытым исходным кодом (Apache 2) и активно разрабатывается
Krakatau: с открытым исходным кодом (GPLv3) и активно разрабатывается
CFR: с открытым исходным кодом (MIT) и активно разрабатывается
Они создают Java-код. Java поставляется с чем-то, что позволяет вам видеть байтовый код JVM (javap).
Ответ 3
Чтобы увидеть исходный код Java, проверьте какой-нибудь декомпилятор. Найдите jad.
Если вы хотите увидеть байт-коды, просто используйте javap, который поставляется вместе с JDK.
Ответ 4
Я попробовал несколько, и Procyon, похоже, сработал для меня лучше всего. Он находится в активной разработке и поддерживает многие функции последних версий Java.
Многообещающий, но часто терпящий неудачу метод декомпиляции. Я буду следить за этим. Также активно разрабатывается с поддержкой новейших функций Java.
Использует другой подход, заключающийся в том, что он пытается вывести эквивалентный Java-код вместо попыток реконструировать исходный код, что потенциально может улучшить его для запутанного кода. По результатам моего тестирования он был примерно на одном уровне с Procyon, но все же приятно иметь что-то другое. Мне пришлось использовать -skip флаг командной строки, чтобы он не останавливался при ошибках. Активно разрабатывается и, что достаточно интересно, написан на Python.