Java-Klassendateien und Bytecode
Java-Klassendateien (Bytecode-Dateien) bestehen aus verschiedenen Komponenten:
Die Zahl # 5 bezieht sich einfach auf einen Ort im Konstantenpool. Und an dieser Position wird eine CONSTANT_FieldRef gefunden, die neben anderen Attributen einen Verweis auf einen CONSTANT_NameAndType enthält. Und CONSTANT_NameAndType enthält eine Referenz auf eine CONSTANT_Utf8 (die die tatsächliche Zeichenfolge / den tatsächlichen Namen enthält).
So sieht der Ablauf folgendermaßen aus:
%Vor% Anstatt eine ganze Zeichenfolge in jeder getfield
Anweisung zu speichern, wird eine Zahl gespeichert. Dies verbessert die Leistung im Interpreter (oder JIT) und den Platz in der Klassendatei.
Von Hand geschriebene Bytecodes
Handgeschriebene Bytecodes können mit diesem Tool zu einer Klassendatei zusammengestellt werden (es enthält viele Beispiele):
Die Anweisung getfield
(IIRC) führt einen Verweis in den Konstantenpool der Klassendatei aus, um Informationen darüber zu erhalten, welches Feld gesucht werden sollte. Die Nummer 5 bedeutet hier "Konstante Pooleintragsnummer 5", und dieser konstante Pool enthält dann die Information "Nach dem Feld name
vom Typ java.lang.String
suchen". Der Grund dafür ist, dass die Größe von% co_de beibehalten wird % Anweisung ist gleich, unabhängig vom Namen oder Typ des zu suchenden Feldes.
Ich bin mir nicht sicher, ob ich verstehe, was Sie mit "Wie kann ich Programm in Bytecode schreiben?" Das ist eine ziemlich offene Frage; Es ist vergleichbar mit der Frage, wie man Programme in einer beliebigen Sprache schreibt, und erfordert viel Lernen. Vielleicht möchten Sie sich den Jasmin Java-Assembler ansehen, der diesen Prozess erheblich vereinfachen kann.
Hoffe, das hilft!