Как я могу открывать файлы Java .class в удобочитаемом виде?

Я пытаюсь выяснить, что делает файл класса Java-апплета под капотом. Открытие его с помощью Блокнота или Текстовой панели просто показывает кучу глупостей.

Есть ли способ вернуть его в удобочитаемый формат, чтобы я мог попытаться понять, что он делает?

  • Среда == Установлена ​​Windows с VS 2008.

Просто семантика, разве не должно быть одно = не два? == - это вопрос, а = - это утверждение, и вы делаете заявление о своей среде.

icco 17.09.2008 00:08

Вы можете прояснить этот вопрос? Я сразу подумал, что вы хотите прочитать настоящий байт-код, но похоже, что вы действительно хотите декомпилировать чужой код.

Outlaw Programmer 17.09.2008 00:39

@icco, = означает присвоение, == означает равенство. Он говорит, что (Environment == Windows с установленной VS2008) верно, не давая указания установить Environment в Windows с установленной VS2008. Человек, который был оффтопом и ботаником.

Blorgbeard 17.09.2008 00:47

Для записи == не декларирует равенство; он проверяет равенство. Вы можете написать true == false, и это примерно так же значимо, как и запись Environment == Windows w / VS 2008, то есть вообще не имеет смысла.

bwerks 21.03.2013 10:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
116
4
483 784
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Использование Джад для декомпиляции, вероятно, ваш лучший вариант. Если код не был запутан, результат будет нормальным.

Это скомпилированный код, вам нужно использовать декомпилятор, например JAD: http://www.kpdus.com/jad.html

Вам нужен декомпилятор Java, для этого вы можете использовать инструмент командной строки javap. Кроме того, ДЕКОМПИЛЯТОР Java. описывает, как вы можете декомпилировать файл класса.

то, что вы ищете, - это декомпилятор java. Я рекомендую JAD http://www.kpdus.com/jad.html. Он бесплатный для некоммерческого использования и выполняет свою работу.

Примечание: это не сделает код точно таким же, как был написан. то есть вы потеряете комментарии и, возможно, имена переменных, поэтому это будет немного сложнее, чем просто читать обычный исходный код. Если разработчик действительно скрытный, он также запутает свой код, что сделает его еще более трудным для чтения.

Как было предложено, вы можете использовать JAD для его декомпиляции и просмотра файлов. Чтобы упростить чтение, вы можете использовать плагин JADclipse для eclipse, чтобы напрямую интегрировать JAD в eclipse, или использовать DJ Java Decompiler, который намного проще в использовании, чем JAD из командной строки.

Если вы не против чтения байт-кода, javap должен работать нормально. Это часть стандартной установки JDK.

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure

JAD - отличный вариант, если в результате вам нужен читаемый код Java. Если вы действительно хотите углубиться во внутреннее устройство формата файла .class, вам понадобится javap. Он связан с JDK и позволяет «декомпилировать» шестнадцатеричный байт-код в читаемый ASCII. Создаваемый им язык по-прежнему является байт-кодом (не похожим на Java), но он довольно читабелен и чрезвычайно поучителен.

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

Ответ принят как подходящий

jd-gui - лучший декомпилятор на данный момент. он может обрабатывать новые функции Java по сравнению с пылящим JAD.

Насколько актуален этот ответ в 2020 году?

The Coding Wombat 24.03.2020 23:36

Пока ссылка куда-то идет, я полагаю, это хорошо. Я бы не знал, есть ли сейчас лучший декомпилятор Java, поскольку я давно не использовал Java.

DarenW 30.03.2020 23:20

Вам нужно использовать декомпилятор. Другие предлагали JAD, есть другие варианты, JAD - лучший.

Я повторю комментарии, которые вы можете немного потерять по сравнению с исходным кодом. Особенно забавно будет выглядеть, если в коде используются дженерики из-за стирания.

Обязательно JAD и / или JADclipse Eclipse plugin.

Декомпилировать Applet.class не нужно. Исходный код общедоступных классов Java API поставляется с JDK (если вы решите установить его) и лучше читается, чем декомпилированный байт-код. Вы можете найти его в сжатом виде в src.zip (находится в папке установки JDK).

Если файл класса, который вы хотите изучить, является открытым исходным кодом, вы не должны декомпилировать его, а вместо этого прикрепите исходные файлы непосредственно в вашу среду IDE. таким образом, вы можете просто просмотреть код некоторого библиотечного класса, как если бы он был вашим собственным

cpuguru, если ваш апплет был скомпилирован с использованием javac 1.3 (или менее), лучшим вариантом будет использование Jad.

К сожалению, последний JDK, поддерживаемый JAD 1.5.8 (14 апреля 2001 г.), - это JDK 1.3.

Если ваш апплет был скомпилирован с помощью более позднего компилятора, вы можете попробовать JD-GUI: этот декомпилятор находится в стадии разработки, тем не менее, он генерирует правильные исходные коды Java, большую часть времени, для классов, скомпилированных с JDK 1.4, 1.5 или 1.6.

DarenW, спасибо за ваш пост. JD-GUI еще не лучший декомпилятор ... но я над этим работаю :)

jd-gui "http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=" - лучший и удобный вариант для декомпиляции файла .class ....

CFR - еще один декомпилятор java - отличный декомпилятор для современной Java, написанной на i Java 6.

Как указано @MichaelMyers, используйте

javap -c <name of java class file> 

чтобы получить код сборки JVM. Вы также можете перенаправить вывод в текстовый файл для лучшей видимости.

javap -c <name of java class file> > decompiled.txt

вы также можете использовать доступные онлайн-декомпиляторы Java. Например, http://www.javadecompilers.com

Другие вопросы по теме