Czy jest narzędzie podobne do OllyDbg/SoftICE dla java? To znaczy. wykonaj klasę (od słoika/ze ścieżką klasy) i, bez kodu źródłowego, pokaż demontaż kodu pośredniego z możliwością przejścia przez/krok po/wyszukania referencji/edycji określonego pośredniego kodu w pamięci/zastosowania edycji do pliku ...Czy istnieje dezasembler + debugger dla java (ala OllyDbg/SoftICE dla asemblera)?
Jeśli nie, czy możliwe jest nawet napisanie czegoś takiego (zakładając, że jesteśmy gotowi żyć bez hotspotu dla czasu debugowania)?
Edytuj: Nie mówię o JAD lub JD lub Cavaj. To są świetne dekompilatory, ale nie chcę dekompilatora z kilku powodów, najbardziej godne uwagi jest to, że ich wyniki są niepoprawne (w najlepszym przypadku, czasami po prostu źle). Nie szukam magicznego "skompilowanego kodu bajtowego do kodu Java" - chcę zobaczyć rzeczywiste bajty, które mają zostać wykonane. Chciałbym też możliwość zmiany tych bajtów (tak jak w debugerze zespołu) i, miejmy nadzieję, zapisać zmienioną część z powrotem do pliku klasy.
Edycja2: Wiem, że istnieje javap - ale działa tylko w jeden sposób (i bez żadnej analizy). Przykład (kod pochodzi z vmspec dokumentacji): z kodu java, używamy "javac" skompilować to:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
do pliku .class Java. Korzystanie javap -c mogę dostać tego wyjścia:
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
Jest OK do demontażu części (nie bardzo dobry, bez analizy - „pole nr 4 jest Example.i”), ale nie mogę znaleźć dwa inne "narzędzia":
- Debugger, który przechodzi przez same instrukcje (ze stosu, zrzutów pamięci, itp.), co pozwala mi sprawdzić rzeczywisty kod i środowisko.
- Sposób odwrócenia procesu - edytuj zdemontowany kod i odtwórz plik .class (z edytowanym kodem).
Wow, świetna odpowiedź. Szkoda, że nie ma takiego narzędzia. Wątpię, czy sam ją zbuduję (bardzo interesująca - ale presja w pracy, życie, niewystarczająca znajomość domeny ...). Dzięki za bardzo kompletną odpowiedź. –
+1 Wszystkie te informacje bardzo mi pomogły! =) Dzięki – jyz