¿Cómo puedo abrir archivos Java .class de forma legible por humanos?
Pregunta
Estoy tratando de descubrir qué hace el archivo de clase de un subprograma de Java en su interior.Abrirlo con el Bloc de notas o el Bloc de texto solo muestra un montón de palabrería.
¿Hay alguna forma de volver a colocarlo en un formato algo legible para poder intentar descubrir qué está haciendo?
- Entorno == Windows con VS 2008 instalado.
Solución
jd-gui es el mejor descompilador del momento.puede manejar funciones más nuevas en Java, en comparación con el polvoriento JAD.
Otros consejos
Si no le importa leer el código de bytes, javap debería funcionar bien.Es parte de la instalación estándar de 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
Si desea un descompilador de Java, puede utilizar la herramienta de línea de comandos javap
para hacer esto.También, Cómo hacerlo el descompilador de Java describe cómo se puede descompilar un archivo de clase.
Lo que buscas es un descompilador de Java.Recomiendo JAD http://www.kpdus.com/jad.html Es gratuito para uso no comercial y hace el trabajo.
Nota:esto no hará que el código sea exactamente igual a lo que se escribió.es decir.perderás comentarios y posiblemente nombres de variables, por lo que será un poco más difícil que simplemente leer el código fuente normal.Si el desarrollador es realmente reservado, también habrá ofuscado su código, haciéndolo aún más difícil de leer.
cpuguru, si tu subprograma ha sido compilado con javac 1.3 (o menos), tu mejor opción es usar Jad.
Lamentablemente, el último JDK compatible con JAD 1.5.8 (14 de abril de 2001) es el JDK 1.3.
Si su subprograma ha sido compilado con un compilador más reciente, puede intentar JD-GUI :Este descompilador está en desarrollo, sin embargo, genera fuentes Java correctas, la mayoría de las veces, para clases compiladas con los JDK 1.4, 1.5 o 1.6.
DarenW, gracias por tu publicación.JD-GUI no es el mejor descompilador todavía...pero estoy trabajando en :)
Como lo señaló @MichaelMyers, use
javap -c <name of java class file>
para obtener el código ensamblador de JVM.También puede redirigir el resultado a un archivo de texto para una mejor visibilidad.
javap -c <name of java class file> > decompiled.txt
Usando jad descompilarlo es probablemente tu mejor opción.A menos que el código haya sido ofuscado, producirá un resultado correcto.
Ese es código compilado, necesitarás usar un descompilador como JAD: http://www.kpdus.com/jad.html
Necesitas usar un descompilador.Otros han sugerido JAD, hay otras opciones, JAD es la mejor.
Me haré eco de los comentarios que quizás se pierdan un poco respecto al código fuente original.Se verá especialmente divertido si el código usa genéricos, debido al borrado.
Complemento JAD y/o JADclipse Eclipse, seguro.
Si el archivo de clase que desea examinar es de código abierto, no debe descompilarlo, sino adjuntar los archivos de origen directamente a su IDE.de esa manera, puedes ver el código de alguna clase de biblioteca como si fuera tuyo
jd-gui "http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=" es la mejor opción y más fácil de usar para descompilar archivos .class....
Como se sugirió, puede usar JAD para descompilarlo y ver los archivos.Para que sea más fácil de leer, puede usar el complemento JADclipse para eclipse para integrar JAD directamente a eclipse o usar DJ Java Decompiler, que es mucho más fácil de usar que la línea de comandos JAD.
JAD es una excelente opción si desea obtener como resultado un código Java legible.Si realmente quieres profundizar en el interior del .class
formato de archivo, querrás javap
.Viene incluido con el JDK y le permite "descompilar" el código de bytes hexadecimal en ASCII legible.El lenguaje que produce sigue siendo código de bytes (no se parece en nada a Java), pero es bastante legible y extremadamente instructivo.
Además, si usted en realidad quieres, puedes abrir cualquier .class
archivo en un editor hexadecimal y leer el código de bytes directamente.El resultado es idéntico al uso javap
.
No es necesario descompilar Applet.class.El código fuente de las clases públicas de la API de Java viene con el JDK (si elige instalarlo) y es mejor legible que el código de bytes descompilado.Puede encontrarlo comprimido en src.zip (ubicado en su carpeta de instalación de JDK).
CFR: otro descompilador de Java es un gran descompilador para Java moderno escrito en Java 6.
También puede utilizar los descompiladores de Java en línea disponibles.Por ej. http://www.javadecompilers.com