JAVA - KLASSENDATEIEN
Seminarvortrag von
Studierach Beatrix
Überblick
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Class-File
Programm in Java Programm
in anderer Sprache Programm
in Java
Compiler Compiler
Compiler
Java class
files Java class
files Other binary
format
Typen
1. PRIMITIVE TYPEN:
u1 ...1 unsigned byte
u2 ... 2 unsigned bytes
u4 ... 4 unsigned bytes
u8 ... 8 unsigned bytes 2. TABELLENNAME
Big Endian
Klassendatei - Struktur
ClassFile{
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1];
u2 access_flags u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attributte_info attributes[attributes_count];
Magic Number: 0xCAFEBABE
Beispiele zur Version
JDK 1.0.2 unterstützt Klassendatei- Formate der Versionen 45.0 bis 45.3
SDK 1.2 unterstützt Klassendatei- Formate der Versionen 45.0 bis 46.0
Versionsnummer: 45.3
Major version no. Minor version no.
Klassendatei - Struktur
ClassFile{
u4 magic;
u2 minor_version; u2 major_version; u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1];
u2 access_flags u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields [fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attributte_info attributes[attributes_count];
Constant Pool
Tag: CONSTANT_Class name_index: 7
Tag: CONSTANT_Utf8_info length: 3
This_class: 1 bytes: „Act“
constant_pool Entry #1
constant_pool Entry #7
this class
Klassendatei - Struktur
ClassFile{
u4 magic;
u2 minor_version; u2 major_version;
u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1]; u2 access_flags
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
Access_flags
Flag Name Bedeutung Verwendung
ACC_PUBLIC Zugriff ausserhalb des
Package möglich Klasse, Interface
ACC_FINAL Keine Unterklassen
erlaubt Klasse
ACC_SUPER Hat geerbte Methoden Klasse, Interface
ACC_INTERFACE Ist ein Interface Interface
ACC_ABSTRACT Ist Abstract und kann nicht
instanziert werden Klasse, Interface
Überblick
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Spezielle Strings
Fully qualified Names
Simple Names
Descriptors
Fully qualified names
Source Code:
– java.lang.Thread
Class File:
– java/lang/Thread
Simple names
Constant Pool Eintrag der auf die Methode String toString() verweist:
– „toString“
Constant Pool Eintrag der auf das Feld java.io.PrintStram out verweist:
– „out“
Descriptors
FieldDescriptor:
FieldType ComponentType:
FieldType FieldType:
BaseType ObjectType ArrayType BaseType:
B C D F I J S Z
ObjectType:
L<classname>
ArrayType:
[ ComponentType MethodDesciptor:
( ParameterDesciptor * ) ReturnDesciptor ObjectType
ArrayType ParameterDesciptor:
FieldType ReturnDesciptor:
FieldType V
Beispiele - Field Desciptor
int i; I
long [][] windingRoad; [[J
java.lang.Object[] stuff [Ljava/lang/Object
Beispiel – MethodDescriptor
int getSize;
()I
void main(String [] args);
([Ljava/lang/String;)V
boolean regionMatches(boolean ignoreCase, int toOffset, String other, int offset, int len);
(ZILjava/lang/Srting;II)Z
Überblick
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Constant Pool
– Allgemeines Format
cp_ info { u1 tag;
u1 info[];
}
tag – Indikator für Typ des Eintrags
info – Inhalt variert mit Wert des Tags
Constant Pool - Tag
CONSTANT_Class
CONSTANT_Fieldref
CONSTANT_Methodref
CONSTANT_InterfaceMethodref
CONSTANT_String
CONSTANT_Integer
CONSTANT_Float
CONSTANT_Long
CONSTANT_Double
CONSTANT_NameAndType
CONSTANT_Utf8
Constant_Class
CONSTANT_Class_info{
U1 tag;
U2 name_index;
}
CONSTANT_NameAndType
CONSTANT_NameAndType_info{
U1 tag;
U2 name_index;
U2 desciptor_index;
}
CONSTANT_UTF8
CONSTANT_utf8_info{
U1 tag;
U2 length;
U2 bytes[length];
}
Überblick
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Attribute
Code
ConstantValue
Deprecated
Exceptions
InnerClasses
LineNumberTable
LocalVariableTable
SourceFile
Synthetic
ConstantValue
ConstantValue_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 constantvalue_index;
}
Code
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_ length]
u2 exception table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count]:
}