Esiste un'utilità simile a OllyDbg/SoftICE per java? Cioè esegui classe (da jar/con percorso classe) e, senza codice sorgente, mostra lo smontaggio del codice intermedio con possibilità di scorrere/passare sopra/cercare riferimenti/modificare codice intermedio specifico in memoria/applicare modifica a file ...C'è un disassemblatore + debugger per java (ala OllyDbg/SoftICE per l'assemblatore)?
In caso contrario, è anche possibile scrivere qualcosa di simile (supponendo che siamo disposti a vivere senza hotspot per la durata del debug)?
Modifica: Non sto parlando di JAD o JD o Cavaj. Questi sono buoni decompilatori, ma non voglio un decompilatore per diversi motivi, il più notevole è che il loro output non è corretto (nella migliore delle ipotesi, a volte è semplicemente sbagliato). Non sto cercando un magico "byte compilato al codice java" - Voglio vedere i byte effettivi che stanno per essere eseguiti. Inoltre, mi piacerebbe poter modificare quei byte (proprio come in un assembly debugger) e, si spera, riportare la parte modificata al file di classe.
Edit2: So che javap esiste, ma lo fa solo in un modo (e senza alcun tipo di analisi). Esempio (codice preso dalla documentazione vmspec): da codice Java, usiamo "javac" per compilare questo:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
in un file Java .class. Utilizzando javap -c posso ottenere questo output:
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
Questo va bene per la parte di smontaggio (non proprio bene senza analisi - "campo # 4 è Example.i"), ma non riesco a trovare i due altri "strumenti":
- Un debugger che va oltre le istruzioni stessi (con una pila, dump di memoria, ecc), che mi permette di esaminare il codice vero e proprio e l'ambiente.
- Un modo per invertire la procedura: modificare il codice smontato e ricreare il file .class (con il codice modificato).
Wow, ottima risposta. Peccato non esiste uno strumento del genere. Dubito che ne costruirò uno io stesso (molto interessante - ma pressione sul lavoro, vita, non abbastanza conoscenza del dominio ...). Grazie per la risposta molto completa. –
+1 tutte queste informazioni mi hanno aiutato molto! =) Grazie – jyz