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?
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.
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
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.
Usar Jad para descompilar es probablemente tu mejor opción. A menos que el código haya sido confuso, producirá un buen resultado.
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.
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
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 :)
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
Ese es el 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.
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.
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 ....
JAD y/o JADclipse Eclipse plugin, seguro.
también puede utilizar los descompiladores de Java en línea disponibles. Por ejemplo http://www.javadecompilers.com
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).
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.
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
.
CFR - otro descompilador de Java es un gran descompilador para Java moderno escrito en Java 6.