Dies ist eine alte Version des Dokuments!


Fields of Item

Verwendung von index, offset und address der Klasse Item

Die Felder index, offset und address der Klasse ch.ntb.inf.deep.classItems.Item werden, je nach dem was Item repräsentiert, anders verwendet. Die untenstehende Liste gibt einen Überblick, wann welches Feld wie verwendet wird.

Bemerkung: Angaben in Eckigen Klammern bezeichnen den Typ. Beispiel: [Class] bedeutet das dieses Objekt vom Typ ch.ntb.inf.deep.classItems.Class ist.

Klassen [Class]

  • index: Wird verwendet, um Interfaces für Interfacemethoden zu nummerieren.
  • offset: Wird nicht verwendet, ist immer -1.
  • address: Die absolute Adresse des Typdescriptors (des Eintrags size).

Arrays [Array]

  • index: Wird nicht verwendet, ist immer -1.
  • offset: Offset des Typdescriptors im Segment.
  • address: Die absolute Adresse des Typdescriptors.

Methoden [Method]

  • index: Bei Instanzmethoden der Index der Methode in der Methodentabelle (beginnend bei 0). Bei Klassenmethoden ist index immer -1. → Wird vom CFR gesetzt.
  • offset: Byteoffset der Methode ausgehend von der Startadresse des Codes der Klasse.
  • address: Absolute Adresse der Methode.

Felder [DataItem]

IMPORTANT Konstante Referenzen

Achtung: bei konstanten, statischen Referenzen ist das Const-Flag (dpfConst) nicht gesetzt, da diese wie normale, nicht konstante statische Felder zu behandeln sind. Dies weil auf solche Felder ein einmaliger Zugriff aus dem Klassenkonstruktor stattfindet!

Beispiel:

static final Object o = new Object();
  1. Klassen-Felder [DataItem]:
    1. Konstante Felder [NamedConst]:
      • index: Wird nicht verwendet, ist immer -1;
      • offset: Wird nicht verwendet, ist immer -1;
      • address: Wird nicht verwendet, ist immer -1;
    2. Nicht konstante Felder [DataItem]:
      • index: Wird nicht verwendet, ist immer -1.
      • offset: Byteoffset des Feldes (beginnend bei 0 für das erste Feld).
      • address: Absolute Adresse des Feldes.
  2. Instanz-Felder [DataItem]:
    • index: Wird nicht verwendet, ist immer -1;
    • offset: Byteoffset des Feldes beginnend bei 0 (inkl. Berücksichtung der Felder der Oberklassen).
    • address: Wird nicht verwendet, ist immer -1;

Konstanten [Constant]

  1. Zahlen [StdConstant]:
    • index: Wenn die Konstante vom Typ float oder double ist, ist index der Index der Konstante im Konstantenpool. Ansonsten immer -1;
    • offset: Wenn die Konstante vom Typ float oder double ist, ist offset der Byteoffset der Konstante im Konstantenpool. Ansonsten immer -1;
    • address: Wenn es sich um eine Konstante vom Typ float oder double handelt, ist address die absolute Adresse der Konstante (direkt im Konstantenblock). Ansonsten immer -1.
  2. Stings [StringLiteral]:
    • index: Wenn es sich bei der Konstante um einen String handelt, so wird in index der Index des Strings im Stringpool abgelegt.
    • offset: Wenn es sich bei der Konstante um einen String handelt, so wird in offset der Byteoffset des Strings im Stringpool abgelegt.
    • address: Absolute Adresse des konstanten Strings (direkt im Konstantenblock).