Como posso abrir arquivos Java .class de maneira legível?
Pergunta
Estou tentando descobrir o que o arquivo de classe de um miniaplicativo Java está fazendo nos bastidores.Abri-lo com o Bloco de Notas ou o Textpad apenas mostra um monte de bobagens.
Existe alguma maneira de colocá-lo de volta em um formato legível para que eu possa tentar descobrir o que ele está fazendo?
- Ambiente == Windows com VS 2008 instalado.
Solução
jd-gui é o melhor descompilador do momento.ele pode lidar com recursos mais recentes em Java, em comparação com o JAD empoeirado.
Outras dicas
Se você não se importa em ler o bytecode, o javap deve funcionar bem.Faz parte da instalação padrão do 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
Você quer um descompilador java, você pode usar a ferramenta de linha de comando javap
para fazer isso.Também, Como fazer o descompilador Java descreve como você pode descompilar um arquivo de classe.
o que você está procurando é um descompilador Java.Eu recomendo JAD http://www.kpdus.com/jad.html É gratuito para uso não comercial e dá conta do recado.
Observação:isso não tornará o código exatamente igual ao que foi escrito.ou sejavocê perderá comentários e possivelmente nomes de variáveis, então será um pouco mais difícil do que apenas ler o código-fonte normal.Se o desenvolvedor for realmente reservado, ele também terá ofuscado seu código, tornando-o ainda mais difícil de ler.
cpuguru, se seu applet foi compilado com javac 1.3 (ou inferior), sua melhor opção é usar Jad.
Infelizmente, o último JDK suportado pelo JAD 1.5.8 (14 de abril de 2001) é o JDK 1.3.
Se o seu applet foi compilado com um compilador mais recente, você pode tentar JD-GUI :este descompilador está em desenvolvimento, porém gera fontes Java corretas, na maioria das vezes, para classes compiladas com os JDKs 1.4, 1.5 ou 1.6.
DarenW, obrigado pela sua postagem.JD-GUI ainda não é o melhor descompilador...mas estou trabalhando :)
Conforme apontado por @MichaelMyers, use
javap -c <name of java class file>
para obter o código assembly da JVM.Você também pode redirecionar a saída para um arquivo de texto para melhor visibilidade.
javap -c <name of java class file> > decompiled.txt
Usando Jad descompilar é provavelmente sua melhor opção.A menos que o código tenha sido ofuscado, ele produzirá um resultado correto.
Esse é o código compilado, você precisará usar um descompilador como o JAD: http://www.kpdus.com/jad.html
Você precisa usar um descompilador.Outros sugeriram o JAD, existem outras opções, o JAD é o melhor.
Vou repetir os comentários de que você pode perder um pouco em comparação com o código-fonte original.Ficará especialmente engraçado se o código usar genéricos, devido ao apagamento.
Plugin JAD e/ou JADclipse Eclipse, com certeza.
Se o arquivo de classe que você deseja examinar for de código aberto, você não deve descompilá-lo, mas anexar os arquivos de origem diretamente ao seu IDE.dessa forma, você pode simplesmente visualizar o código de alguma classe de biblioteca como se fosse seu
jd-gui "http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q="é a melhor e mais fácil opção para descompilar o arquivo .class....
Como sugerido, você pode usar JAD para descompilar e visualizar os arquivos.Para facilitar a leitura você pode usar o plugin JADclipse para Eclipse para integrar o JAD diretamente ao Eclipse ou usar o DJ Java Decompiler que é muito mais fácil de usar do que o JAD de linha de comando
JAD é uma excelente opção se você deseja um código Java legível como resultado.Se você realmente deseja se aprofundar nos detalhes do .class
formato de arquivo, você vai querer javap
.Ele vem junto com o JDK e permite "descompilar" o bytecode hexadecimal em ASCII legível.A linguagem que ele produz ainda é bytecode (nada parecido com Java), mas é bastante legível e extremamente instrutivo.
Além disso, se você realmente quiser, você pode abrir qualquer .class
arquivo em um editor hexadecimal e leia o bytecode diretamente.O resultado é idêntico ao uso javap
.
Não há necessidade de descompilar Applet.class.O código-fonte das classes públicas da API Java vem com o JDK (se você optar por instalá-lo) e é melhor legível do que o bytecode descompilado.Você pode encontrá-lo compactado em src.zip (localizado na pasta de instalação do JDK).
CFR - outro descompilador java é um ótimo descompilador para Java moderno escrito em Java 6.
você também pode usar os descompiladores Java online disponíveis.Por exemplo http://www.javadecompilers.com