czytałem kodu bajtowego Javy i zobaczyłem to:Odczytywanie instrukcji kodu bajtowego Java: Co oznacza ta liczba?
getfield #5 (Field java.lang.String name)
Co #5
oznacza?
A jak mogę napisać program w bajtodzie?
czytałem kodu bajtowego Javy i zobaczyłem to:Odczytywanie instrukcji kodu bajtowego Java: Co oznacza ta liczba?
getfield #5 (Field java.lang.String name)
Co #5
oznacza?
A jak mogę napisać program w bajtodzie?
Java pliki klas i kod bajtowy
pliki klas Java (kod bajtowy-files) składa się z różnych elementów:
http://en.wikipedia.org/wiki/Java_class_file
Liczba # 5 odnosi się po prostu do lokalizacji w puli stałej. I w tej pozycji znaleziono CONSTANT_FieldRef, który zawiera odniesienie do CONSTANT_NameAndType wśród innych atrybutów. I CONSTANT_NameAndType zawiera odniesienie do CONSTANT_Utf8
więc przepływ wygląda następująco (który zawiera rzeczywisty ciąg/nazwę.):
getfield #number -> FieldRef -> NameAndType -> Utf8 -> string
http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
Więc zamiast ratować cały ciąg w każdy getfield
instrukcja zapisanie numeru. Poprawia to wydajność interpretera (lub JIT) i spacji w pliku klasy.
Ręcznie zapisu bytecodes
bytecodes odręcznego mogą być montowane do pliku klasy z tego narzędzia (zawiera wiele przykładów):
Instrukcja getfield
(IIRC) zawiera odniesienie do puli stałych pliku klasy, aby uzyskać informacje o tym, które pole należy wyszukać. Numer 5 oznacza tutaj "stały numer puli wpisu 5", a ta stała pula zawiera informacje "wyszukaj pole name
typu java.lang.String
). Powodem tego jest to, że utrzymuje on ten sam rozmiar instrukcji getfield
, niezależnie od tego, nazwy lub typu pola do wyszukania:
Nie jestem pewien, czy rozumiem, co masz na myśli przez "w jaki sposób mogę napisać program w bajtodzie?" To jest dość otwarte pytanie, to jest podobne do pytania jak pisać programy w dowolnym języku i wymaga dużo nauki. można zajrzeć do Java asemblerze Jasmin, które mogą znacznie ułatwić ten proces.
Nadzieja to pomaga!
Pisząc program w Java i skompilowanie go. – Jeffrey
Czego szukasz? Optymalizacje ASM-podobne dla JVM? – Thomas