Hi,
Nein, ist es nicht, wenn der Compiler Optimierungen am Code vornimmt,
bevor er diesen in Maschinensprache/Bytecode übersetzt, zb. indem er
rekursive Funktionsaufrufe erkennt und beseitigt.
Kompromiss: Es ist nicht unbedingt möglich, den ursprünglichen Zustand des Quellcodes _exact_ wiederherzustellen (Stichpunkte: Inlining, loop unrolling etc.). Aber es ist prinzipiell möglich, den Ursprungscode semantisch zu rekonstruieren.
Wenn mit "javac" kompiliert wurde, sind sogar noch alle Identifier,
Funktionsnamen etc. vorhanden.
Ich wusste nicht, dass der javac nichtmal das schafft, überflüssige
Daten über Bord zu werfen, wenn er ein Java-Programm kompiliert.
Wie Daniel bereits sagte, das ist Teil des Konzeptes und kann sehr hilfreich sein (außer für Debugging).
Aber
ich hoffe, dass es auch vernünftige Java-Compiler gibt, die das machen.
Dafür gibt es "Code-Obfuscators", die dann den dekompilierten Code so unverständlich wie möglich machen.
Viel Grüße,
Martin
bye, Frank!