it-swarm.it

Come posso aprire i file .class di Java in modo leggibile?

Sto cercando di capire cosa sta facendo il file di classe di un applet Java sotto il cofano. Aprirlo con Blocco note o Textpad mostra solo un sacco di gobbledy-gook.

C'è un modo per riassociare in un formato in qualche modo leggibile, così posso provare a capire cosa sta facendo?

  • Ambiente == Windows con VS 2008 installato.
96
cpuguru

jd-gui è il miglior decompilatore al momento. è in grado di gestire le nuove funzionalità di Java, rispetto al JAD sempre più polveroso.

195
DarenW

Se non ti dispiace leggere il bytecode, javap dovrebbe funzionare correttamente. Fa parte dell'installazione standard di 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
68
Michael Myers

Se vuoi un decompilatore Java, puoi usare lo strumento della riga di comando javap per farlo. Inoltre, Java Decompiler HOW-TO descrive come è possibile decompilare un file di classe.

7
Drew Frezell

Usare Jad per decompilarlo è probabilmente la scelta migliore. A meno che il codice non sia stato oscurato, produrrà un risultato corretto.

2
Rasmus Faber

quello che stai cercando è un de-compilatore Java. Raccomando JAD http://www.kpdus.com/jad.html E 'gratuito per uso non commerciale e porta a termine il lavoro. 

Nota: questo non renderà il codice esattamente uguale a quello che è stato scritto. cioè perderai commenti e probabilmente nomi di variabili, quindi sarà un po 'più difficile della sola lettura del normale codice sorgente. Se lo sviluppatore è davvero riservato, avrà anche nascosto il codice, rendendolo ancora più difficile da leggere. 

2
David Beleznay

cpuguru, se l'applet è stata compilata con javac 1.3 (o meno), l'opzione migliore è usare Jad.

Sfortunatamente, l'ultimo JDK supportato da JAD 1.5.8 (14 aprile 2001) è JDK 1.3.

Se l'applet è stata compilata con un compilatore più recente, è possibile provare JD-GUI : questo decompilatore è in fase di sviluppo, tuttavia genera origini Java corrette, la maggior parte delle volte, per classi compilate con JDK 1.4, 1.5 o 1.6.

DarenW, grazie per il tuo post. JD-GUI non è ancora il miglior decompilatore ... ma sto lavorando :)

2
Emmanuel Dupuy

Se il file di classe che vuoi esaminare è open source, non dovresti decompilarlo, ma invece allegare i file sorgente direttamente nel tuo IDE. in questo modo, puoi semplicemente visualizzare il codice di qualche classe di libreria come se fosse la tua

1
arturh

Questo è un codice compilato, dovrai usare un decompilatore come JAD: http://www.kpdus.com/jad.html

1
cynicalman

Devi usare un decompilatore. Altri hanno suggerito JAD, ci sono altre opzioni, JAD è il migliore.

Riesco a echeggiare i commenti che potresti perdere un po 'rispetto al codice sorgente originale. Sembrerà particolarmente divertente se il codice usi i generici, a causa della cancellazione.

1
Zac Gochenour

Come sottolineato da @MichaelMyers, usa 

javap -c <name of Java class file> 

per ottenere il codice assembly JVM. È inoltre possibile reindirizzare l'output in un file di testo per una migliore visibilità.

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

jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.Zip&can=2&q= " è l'opzione migliore e facile da usare per decompilare il file .class ....

JAD e/o JADclipse Eclipse plug-in, di sicuro.

1
John Gardner

è anche possibile utilizzare i decompilatori Java online disponibili. Ad es. http://www.javadecompilers.com

0
Prachi Sharma

Non è necessario decompilare Applet.class. Le classi API Java pubbliche sourcecode vengono fornite con JDK (se si sceglie di installarlo) ed è meglio leggibile di decodificare bytecode. Puoi trovare compresso in src.Zip (che si trova nella cartella di installazione di JDK).

0
Arno

Come suggerito puoi usare JAD per decompilarlo e visualizzare i file. Per semplificare la lettura, è possibile utilizzare il plug-in JADclipse per Eclipse per integrare JAD direttamente su Eclipse o utilizzare DJ Java Decompiler che è molto più semplice da utilizzare rispetto alla riga di comando JAD

0
amitwadhwa

JAD è un'opzione eccellente se si desidera che il codice Java sia leggibile. Se si vuole veramente scavare nella parte interna del formato di file .class, si vorrà javap. È fornito in bundle con JDK e consente di "decompilare" il bytecode esadecimale in ASCII leggibile. Il linguaggio che produce è ancora un bytecode (non qualcosa come Java), ma è abbastanza leggibile ed estremamente istruttivo.

Inoltre, se tu davvero vuoi, puoi aprire qualsiasi file .class in un editor esadecimale e leggere direttamente il bytecode. Il risultato è identico all'utilizzo di javap.

0
Daniel Spiewak

CFR - un altro decompilatore Java è un grande decompilatore per Java moderno scritto in Java 6.

0
tidbeck