Comment puis-je ouvrir Java.fichiers de classe d'une manière lisible par l'homme?
J'essaie de comprendre ce que fait le fichier de classe d'une applet Java sous le capot. En l'ouvrant avec le bloc-notes ou Textpad montre juste un tas de charabia.
Y a-t-il un moyen de le remobiliser dans un format quelque peu lisible afin que je puisse essayer de comprendre ce qu'il fait?
- Environnement == Windows w/ VS 2008 installé.
17 answers
Jd-gui est le meilleur décompilateur pour le moment. il peut gérer les nouvelles fonctionnalités en Java, par rapport au JAD poussiéreux.
Si cela ne vous dérange pas de lire le bytecode, javap devrait fonctionner correctement. Il fait partie de l'installation JDK standard.
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
Vous voulez un décompilateur java, vous pouvez utiliser l'outil de ligne de commande javap
pour ce faire. En outre, Java Decompiler HOW-TO décrit comment décompiler un fichier de classe.
Utiliser Jad décompiler, il est probablement votre meilleure option. À moins que le code n'ait été obscurci, il produira un résultat correct.
Ce que vous recherchez est un dé-compilateur java. Je recommande JAD http://www.kpdus.com/jad.html Il est gratuit pour un usage non commercial et fait le travail.
Remarque: cela ne va pas rendre le code exactement le même que ce qui a été écrit. c'est-à-dire que vous allez perdre des commentaires et éventuellement des noms de variables, donc ce sera un peu plus difficile que de simplement lire du code source normal. Si le développeur est vraiment secret, il aura également obscurci son code, ce qui le rendra encore plus difficile à lire.
Cpuguru, si votre applet a été compilé avec javac 1.3 (ou moins), votre meilleure option est d'utiliser Jad.
Malheureusement, le dernier JDK supporté par JAD 1.5.8 (14 avril 2001) est JDK 1.3.
Si votre applet a été compilé avec un compilateur plus récent, vous pouvez essayer JD-GUI: ce décompilateur est en cours de développement, néanmoins, il génère des sources Java correctes, la plupart du temps, pour les classes compilées avec les JDKs 1.4, 1.5 ou 1.6.
DarenW, merci pour votre message. JD-GUI n'est pas encore le meilleur décompilateur ... mais je travaille sur:)
C'est du code compilé, vous devrez utiliser un décompilateur comme JAD: http://www.kpdus.com/jad.html
, Vous devez utiliser un décompilateur. D'autres ont suggéré JAD, il y a d'autres options, JAD est le meilleur.
Je vais faire écho aux commentaires que vous risquez de perdre un peu par rapport au code source d'origine. Il va s'intéresser particulièrement drôle si le code utilisé génériques, en raison de l'effacement.
JAD et / ou JADclipse Eclipse plugin, à coup sûr.
Si le fichier de classe que vous souhaitez examiner est open source, vous ne devez pas le décompiler, mais plutôt attacher les fichiers source directement dans votreE. de cette façon, vous pouvez simplement afficher le code d'une classe de bibliothèque comme s'il s'agissait de la vôtre
Jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= " est la meilleure option pour décompiler.fichier de classe....
Comme suggéré, vous pouvez utiliser JAD pour le décompiler et afficher les fichiers. Pour faciliter la lecture, vous pouvez utiliser le plugin JADclipse pour eclipse pour intégrer JAD directement à eclipse ou utiliser DJ Java Decompiler qui est beaucoup plus facile à utiliser que la ligne de commande JAD
JAD est une excellente option si vous voulez du code Java lisible en conséquence. Si vous voulez vraiment creuser dans les internes du format de fichier .class
, vous allez vouloir javap
. Il est fourni avec le JDK et vous permet de "décompiler" le bytecode hexadécimal en ASCII lisible. Le langage qu'il produit est toujours bytecode (pas quelque chose comme Java), mais il est assez lisible et extrêmement instructif.
Aussi, {si vous[7]}vraiment voulez, vous pouvez ouvrir n'importe quel .class
fichier dans un éditeur hexadécimal et lire le bytecode directement. Le résultat est identique à l'utilisation de javap
.
Il n'est pas nécessaire de décompiler l'applet.classe. Les classes d'API Java publiques sourcecode sont fournies avec le JDK (si vous choisissez de l'installer) et sont mieux lisibles que le bytecode décompilé. Vous pouvez trouver compressé dans src.zip (situé dans votre dossier d'installation JDK).
CFR-another java decompiler est un excellent décompilateur pour Java moderne écrit i Java 6.
Comme l'a souligné @MichaelMyers, utilisez
javap -c <name of java class file>
Pour obtenir le code assembleur JVM. Vous pouvez également rediriger la sortie vers un fichier texte pour une meilleure visibilité.
javap -c <name of java class file> > decompiled.txt
Vous pouvez également utiliser les décompilateurs java en ligne disponibles. Pour par exemple http://www.javadecompilers.com