2012-02-17 21 views

Odpowiedz

6

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

  • Magia Numer: 0xCAFEBABE
  • Wersja Klasa File Format: mniejsze i główne wersje pliku klasy
  • Pula stała: Pula stałych dla klasy
  • (...)
  • pola: Wszystkie pola w klasie
  • Metody: Wszelkie metody w klasie
  • atrybuty: Wszelkie atrybuty klasy (na przykład nazwa SourceFile, itp)

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):

http://jasmin.sourceforge.net/

4

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!