Ich möchte eine einfache Möglichkeit Java zu dekompilieren. Ich möchte die Konvertierungen und Modifikationen untersuchen, die der Javac-Compiler an meinem Code vornimmt. Was wären gute Produkte und was wäre gut/schlecht?Wie dekompiliere ich Java
Antwort
Verwenden Sie schnell und schmutzig die javap
, die mit dem JDK geliefert wird.
javap -c test
Compiled from "test.java"
public class test extends java.lang.Object{
public test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: ldC#2; //String CR_ABC_DEF_GHI
2: astore_1
3: ldC#3; //String TYPE=Eligibility Only|CLIENT_ID=62|EMPLOYER_ID=0|LOCATION_ID=0|PLAN_ID=all|FREQUENCY=52|FILE=null|FILETYPE=C|PROCESSTOLAUNCH=10|PROCESSTOLAUNCHSTATUS=100|SCHEDULE_ID=29837d692f4c43e786f1097fab7c360c
5: astore_2
6: ldC#4; //String \|
8: astore_3
9: ldC#5; //String FILE_NAME_TEMPLATE
11: astore 4
13: ldC#6; //String FILE
15: astore 5
17: new #7; //class java/lang/StringBuilder
20: dup
21: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
24: aload_3
25: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
28: aload 4
30: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
33: ldC#10; //String =
35: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
38: ldC#11; //String [^
40: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
43: aload_3
44: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
47: ldC#12; //String ]*
49: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
52: aload_3
53: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
56: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
59: astore 6
61: new #7; //class java/lang/StringBuilder
64: dup
65: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
68: aload_3
69: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
72: aload 5
74: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
77: ldC#10; //String =
79: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
82: ldC#11; //String [^
84: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
87: aload_3
88: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
91: ldC#12; //String ]*
93: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
96: aload_3
97: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
100: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
103: astore 7
105: new #7; //class java/lang/StringBuilder
108: dup
109: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
112: aload_3
113: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
116: aload 4
118: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
121: ldC#10; //String =
123: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
126: aload_1
127: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
130: aload_3
131: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
134: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
137: astore 8
139: aload_2
140: aload 6
142: aload 8
144: invokevirtual #14; //Method java/lang/String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
147: aload 7
149: aload 8
151: invokevirtual #14; //Method java/lang/String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
154: astore 9
156: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
159: new #7; //class java/lang/StringBuilder
162: dup
163: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
166: ldC#16; //String before =
168: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
171: aload_2
172: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
175: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
178: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
181: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
184: new #7; //class java/lang/StringBuilder
187: dup
188: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
191: ldC#18; //String pattern1 =
193: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
196: aload 6
198: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
201: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
204: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
207: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
210: new #7; //class java/lang/StringBuilder
213: dup
214: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
217: ldC#19; //String pattern2 =
219: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
222: aload 7
224: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
227: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
230: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
233: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
236: new #7; //class java/lang/StringBuilder
239: dup
240: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
243: ldC#20; //String replace =
245: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
248: aload 8
250: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
253: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
256: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
259: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
262: new #7; //class java/lang/StringBuilder
265: dup
266: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
269: ldC#21; //String after =
271: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
274: aload 9
276: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
279: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
282: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
285: return
}
Dies wird Ihnen eine bessere Vorstellung davon geben, was der Compiler macht. Der Decompiler wird sein Bestes versuchen, um dies wieder in einen vernünftigen Code zu verwandeln, der viele Details versteckt. –
Das beste ist wahrscheinlich jad:
Wenn Sie Eclipse, können Sie das JadClipse Plugin, für eine ergonomische Schnittstelle verwenden:
ich gefunden habe, this tool ziemlich gut.
Ich habe JAD verwendet und kann es zu seiner Nützlichkeit testen.
Nur als ein Kopf, obwohl jede de-kompilierte Code höchstwahrscheinlich frei von Kommentaren sein wird, und wenn der Code verschleiert wird dann Dekompilieren wird Sie wirklich nicht wohin. Es wird immer noch wie Kauderwelsch aussehen.
Ein weiteres Java Decompiler - AndroChef Java Decompiler ist verfügbar: http://www.neshkov.com/ac_decompiler.html
- 1. Wie dekompiliere ich flüchtige Variablen in Java?
- 2. Wie dekompiliere ich diese x87-Assembly-Berechnung?
- 3. Wie dekompiliere ich eine SWF-Datei
- 4. Wie dekompiliere ich eine von xcode deployed App
- 5. Wie dekompiliere ich mit der richtigen Zeilennummer mit Hilfe von Fernblume?
- 6. Wie instrumentiere ich Java-Methoden?
- 7. Wie kann ich Java umwandeln
- 8. Wie lese ich Java-Dokumentation?
- 9. Wie dokumentiere ich meine Methode in Java wie Java-Dokumente?
- 10. Java - Wie kompiliere ich eine einzelne Datei mit Java Eclipse
- 11. jOOQ, Java - Wie importiere ich generierte Java-Dateien?
- 12. Java: Wie katalogiere ich Java-API-Dokumente mit Quicksilver?
- 13. Wie kann ich \ mit/in Java ersetzen?
- 14. Wie kann ich Java-Exe zu jar
- 15. Wie bekomme ich die Java-Syntax korrekt?
- 16. Wie bekomme ich ein lauffähiges Java-Programm?
- 17. Wie generiere ich generische Listentypen in Java?
- 18. Wie schreibe ich Java-Programm Get Pid
- 19. Wie mache ich Java-Anwendungen Standalone?
- 20. Wie kann ich einen Java-Daemon machen
- 21. Wie handhabe ich gleichzeitige Tastenbetätigungen in Java?
- 22. Wie benutze ich Java Math Commons CurveFitter?
- 23. Wie verteile ich Java-Projekte in Eclipse?
- 24. Wie konvertiere ich Sonderzeichen mit Java?
- 25. Wie führe ich eine .group() mit Java
- 26. Wie schaffe ich Schwerkraft in Java GUI?
- 27. Wie sammle ich JVM Leistungsstatistik von Java
- 28. Wie generiere ich RTF aus Java?
- 29. Wie verbinde ich zwei Layout-Java-Android?
- 30. Wie kann ich diese Java-Sammelform erstellen?
Viele Ansatzpunkte? http://stackoverflow.com/search?q=decompiler+java – birryree
Der Compiler ** nie ** ändert Ihren Code, er übersetzt Ihren Code in Java-Byte-Code (der in einer '.class'-Datei gespeichert ist). –
Es ist erwähnenswert, dass der Compiler sehr wenige Optimierungen durchführt und Ihnen nicht viel von einer Idee gibt, was die JVM zur Laufzeit machen wird. In der JVM werden alle wesentlichen Optimierungen vorgenommen. –