Pracuję nad manipulacją/generowaniem kodu bajtowego w Javie i zastanawiałem się, czy istnieje prosty sposób sprawdzenia kodu bajtowego. Nie chcę dekompilować pliku, chciałbym faktycznie spojrzeć na skompilowany kod bajtowy. Nie muszę tego edytować. Wszelkie linki lub programy do robienia tego byłyby akceptowalnymi odpowiedziami.Czy możliwe jest przeglądanie plików klasy Java według kodu bajtowego
Odpowiedz
Pracowałem nad decompiler, który ma kodowany kolorami kod bajtowy (który uważam za znacznie bardziej czytelny niż javap). Może również wyprowadzać kod Java lub pośredni "kod bajtowy AST".
The javap
command-line tool, który jest dołączony do pakietu Oracle JDK, zapewnia szczegółowy zrzut tekstowy plików .class wraz ze stałą pulą i zawartością bajtów wszystkich funkcji. Po prostu uruchom go za pomocą -v
, aby uzyskać pełny zrzut.
ale chcę zobaczyć, co kompilator czyta, gdy czyta plik, aby utworzyć własne syntetyczne klasy. – Popgalop
@Popgalop to, co odczytuje kompilator, jest faktycznym bajtem kodu, który nie jest formatem tekstowym. Sądzę, że możesz otworzyć go w edytorze szesnastkowym i użyć [tego odnośnika] (http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html), aby sam go przeanalizować , ale jeśli chcesz zrzut czytelny dla człowieka, 'javap -v' jest odpowiedzią. – Oak
Odkąd chciałeś być prowadzony do jakiegoś programu, który może łatwo pokazać kod bajtowy, moją sugestią jest użycie IntelliJ IDEA, ponieważ ma wbudowaną obsługę wyświetlania kodu bajtowego.
Oto przykład jak to zrobić (może też być odwzorowane na niektórych klawiszy do wyboru):
Jest to bardzo proste, a to może z pewnością być zrobione w Zaćmienie lub NetBeans.
- 1. Wizualizator kodu bajtowego Java
- 2. Dekompilowanie plików kodu bajtowego OCaml
- 3. Szyfrowanie kodu bajtowego jest bezpieczne
- 4. Czy możliwe jest bezpośrednie napisanie programu za pomocą instrukcji kodu bajtowego Java?
- 5. Autonomiczny weryfikator kodu bajtowego
- 6. Czy prawidłowe jest posiadanie klasy kodu bajtowego JVM bez żadnego konstruktora?
- 7. Czy jest możliwe dodanie "statycznej" funkcji rozszerzenia dla klasy Java?
- 8. Przeglądanie historii plików git
- 9. CPython to interpreter kodu bajtowego?
- 10. Analiza kodu bajtowego w Javie
- 11. Wyświetlanie wygenerowane przez bajt kodu bajtowego
- 12. Czy w jakiś sposób możliwe jest dziedziczenie kodu końcowego modyfikującego klasę?
- 13. Odczytywanie instrukcji kodu bajtowego Java: Co oznacza ta liczba?
- 14. Kod powrotu celu IntelliJ dla kodu bajtowego
- 15. Obfuscowanie kodu bajtowego python poprzez mutację interpretera
- 16. Java OO: Czy to możliwe?
- 17. Czy możliwe jest generowanie zwykłego kodu XML przy użyciu Haml?
- 18. Czy możliwe jest iteracyjne przeglądanie wszystkich klas w pakiecie z odbiciem?
- 19. Jakie są motywy kompilacji kodu bajtowego?
- 20. Czy możliwe jest grupowanie według wielu wymiarów w filtrze poprzecznym?
- 21. Eclipse: Czy możliwe jest edytowanie źródła Java znanego z kodu źródłowego "załącznik"
- 22. Sens „>>” w Pythonie kodu bajtowego
- 23. Java: Scalanie wielu plików dziennika według daty
- 24. Czy jest możliwe instrument z javassist klienckich klas java? Klasy załadowane przez bootloader classloader
- 25. Czy możliwe jest rozszerzenie klasy Java o jedną o tej samej nazwie?
- 26. Czy jest możliwe wykonanie serializacji binarnej .NET, gdy nie masz kodu źródłowego klasy?
- 27. Czy jest możliwe, aby wartość adnotacji Java była obowiązkowa?
- 28. Generowanie kodu bajtowego JVM dla jednoargumentowego nie wyrażenia
- 29. Czy ten wątek klasy Java jest bezpieczny?
- 30. Czy możliwe jest formatowanie kodu C++ za pomocą VIM?
Zazwyczaj można to zrobić bezpośrednio z poziomu IDE. Może z niewielką pomocą wtyczki. – maba
Myślę, że 'javap' jest tym, czego szukasz. Polecenie dostarczane z pakietem JDK. –
spróbuj javap -c classfile – Satya