Как я могу открыть файлы Java .class понятным для человека способом? - PullRequest
100 голосов
/ 17 сентября 2008

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

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

  • Среда == Windows w / VS 2008 установлена.

Ответы [ 17 ]

196 голосов
/ 17 сентября 2008

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

70 голосов
/ 17 сентября 2008

Если вы не против чтения байт-кода, 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
7 голосов
/ 17 сентября 2008

Вам нужен Java-декомпилятор, вы можете использовать инструмент командной строки javap, чтобы сделать это. Кроме того, Java-декомпилятор HOW-TO описывает, как можно декомпилировать файл класса.

2 голосов
/ 23 декабря 2008

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 еще не лучший декомпилятор ... но я работаю над:)

2 голосов
/ 16 февраля 2018

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

javap -c <name of java class file> 

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

javap -c <name of java class file> > decompiled.txt
2 голосов
/ 17 сентября 2008

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

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

2 голосов
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

Плагин JAD и / или JADclipse Eclipse, наверняка.

1 голос
/ 17 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...