web-development-kb-es.site

¿Cómo puedo abrir archivos .class de Java de forma legible?

Estoy tratando de averiguar qué hace un archivo de clase de un applet de Java bajo el capó. Al abrirlo con el Bloc de notas o el Textpad solo se muestra un puñado de gobbledy-gook.

¿Hay alguna forma de volver a ponerlo de nuevo en un formato algo legible para que pueda intentar averiguar qué está haciendo?

  • Ambiente == Windows w/VS 2008 instalado.
100
cpuguru

jd-gui es el mejor descompilador del momento. puede manejar características más nuevas en Java, en comparación con el JAD que se llena de polvo.

196
DarenW

Si no te 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
69
Michael Myers

Si desea un decompilador de Java, puede usar la herramienta de línea de comandos javap para hacer esto. Además, Java Decompiler HOW-TO describe cómo puedes descompilar un archivo de clase.

7
Drew Frezell

Usar Jad para descompilar es probablemente tu mejor opción. A menos que el código haya sido confuso, producirá un buen resultado.

2
Rasmus Faber

lo que estás buscando es un descompilador de Java. Recomiendo JAD http://www.kpdus.com/jad.html Es gratis para uso no comercial y hace el trabajo.

Nota: esto no hará que el código sea exactamente igual al que se escribió. es decir, perderá 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án ofuscado su código, haciendo que sea aún más difícil de leer.

2
David Beleznay

Según lo señalado por @MichaelMyers, use

javap -c <name of Java class file> 

para obtener el código de montaje JVM. También puede redirigir la salida a un archivo de texto para una mejor visibilidad.

javap -c <name of Java class file> > decompiled.txt
2
Nilashish C

cpuguru, si su applet ha sido compilado con javac 1.3 (o menos), su mejor opción es usar Jad.

Desafortunadamente, el último JDK compatible con JAD 1.5.8 (14 de abril de 2001) es JDK 1.3.

Si su applet ha sido compilado con un compilador más reciente, podría probar JD-GUI : este descompilador está en desarrollo, sin embargo, genera las fuentes Java correctas, la mayoría de las veces, para las clases compiladas con los JDKs 1.4, 1.5 o 1.6.

DarenW, gracias por tu post. JD-GUI no es el mejor descompilador todavía ... pero estoy trabajando en :)

2
Emmanuel Dupuy

Si el archivo de clase que desea examinar es de código abierto, no debe descompilarlo, sino adjuntar los archivos de origen directamente en su IDE. de esa manera, puedes ver el código de alguna clase de biblioteca como si fuera el tuyo

1
arturh

Ese es el código compilado, necesitarás usar un descompilador como JAD: http://www.kpdus.com/jad.html

1
cynicalman

Necesitas usar un descompilador. Otros han sugerido JAD, hay otras opciones, JAD es la mejor.

Repetiré los comentarios que puedes perder un poco en comparación con el código fuente original. Se verá especialmente gracioso si el código usa genéricos, debido al borrado.

1
Zac Gochenour

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 fácil de usar para descompilar el archivo .class ....

1

JAD y/o JADclipse Eclipse plugin, seguro.

1
John Gardner

también puede utilizar los descompiladores de Java en línea disponibles. Por ejemplo http://www.javadecompilers.com

0
Prachi Sharma

No hay necesidad de descompilar Applet.class. El código fuente de la API de Java pública viene con el JDK (si decide instalarlo), y es más legible que el código de bytes descompilado. Puede encontrarlo comprimido en src.Zip (ubicado en su carpeta de instalación de JDK).

0
Arno

Como se sugiere, puede usar JAD para descompilarlo y ver los archivos. Para facilitar la lectura, puede utilizar 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.

0
amitwadhwa

JAD es una excelente opción si desea obtener un código Java legible como resultado. Sin embargo, si realmente quieres profundizar en los aspectos internos del formato de archivo .class, querrás javap. Se incluye con el JDK y le permite "descompilar" el código de bytes hexadecimal en ASCII legible. El lenguaje que produce sigue siendo un código de bytes (no parecido a Java), pero es bastante legible y extremadamente instructivo.

Además, si usted realmente quiere hacerlo, puede abrir cualquier archivo .class en un editor hexadecimal y leer el código de bytes directamente. El resultado es idéntico a usar javap.

0
Daniel Spiewak

CFR - otro descompilador de Java es un gran descompilador para Java moderno escrito en Java 6.

0
tidbeck