Gibt es ein ähnliches Dienstprogramm wie OllyDbg / SoftICE für Java? D.h. Klasse ausführen (aus jar / mit Klassenpfad) und, ohne Quellcode, die Disassemblierung des Zwischencodes mit der Fähigkeit, Schritt durch / Schritt über / Suche nach Referenzen / bearbeiten spezifische Zwischencode im Speicher / gelten bearbeiten, um Datei...
Wenn nicht, ist es überhaupt möglich, so etwas zu schreiben (vorausgesetzt, wir sind bereit, für die Dauer der Fehlersuche ohne Hotspot zu leben)?
Edit: Ich spreche nicht von JAD oder JD oder Cavaj. Das sind gute Decompiler, aber ich will aus mehreren Gründen keinen Decompiler, der wichtigste ist, dass ihre Ausgabe falsch ist (im besten Fall, manchmal einfach nur falsch). Ich bin nicht auf der Suche nach einer magischen "Kompilierung von Bytes zu Java-Code" - ich möchte die tatsächlichen Bytes sehen, die gerade ausgeführt werden sollen. Außerdem möchte ich die Möglichkeit haben, diese Bytes zu ändern (genau wie in einem Assembler-Debugger) und hoffentlich den geänderten Teil zurück in die Klassendatei zu schreiben.
Edit2: Ich weiß, dass javap existiert - aber es macht nur einen Weg (und ohne irgendeine Art von Analyse). Beispiel (Code aus der vmspec-Dokumentation): Aus Java-Code kompilieren wir diesen mit "javac":
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
in eine Java-Klassendatei. Mit javap -c kann ich diese Ausgabe erhalten:
Method void setIt(int)
0 aload_0
1 iload_1
2 putfield #4
5 return
Method int getIt()
0 aload_0
1 getfield #4
4 ireturn
Das ist OK für den Demontageteil (nicht wirklich gut ohne Analyse - "Feld #4 ist Beispiel.i"), aber ich kann die beiden anderen "Werkzeuge" nicht finden:
- Ein Debugger, der die Anweisungen selbst überprüft (mit Stack, Speicherabzügen usw.), so dass ich den eigentlichen Code und die Umgebung untersuchen kann.
- Ein Weg, den Prozess umzukehren - bearbeiten Sie den disassemblierten Code und erstellen Sie die .class-Datei neu (mit dem bearbeiteten Code).