java - klassendateien

Werbung
JAVA - KLASSENDATEIEN
Seminarvortrag von
Studierach Beatrix
1
Überblick




2
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Class-File
Programm
in Java
Programm
in anderer
Sprache
Programm
in Java
3
Compiler
Java
class
files
Compiler
Java
class
files
Compiler
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
4
Big Endian
Klassendatei - Struktur
5
ClassFile{
u4 magic;
Magic Number: 0xCAFEBABE
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];
}
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:
Major version no.
6
45.3
Minor version no.
Klassendatei - Struktur
7
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
constant_pool
Entry #1
constant_pool
Entry #7
Tag: CONSTANT_Class
name_index: 7
Tag: CONSTANT_Utf8_info
length: 3
bytes: „Act“
this class
This_class: 1
8
Klassendatei - Struktur
9
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
10
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 Klasse, Interface
instanziert werden
Überblick




11
Klassendatei 
Spezielle Strings
Constant Pool
Attribute
Spezielle Strings



12
Fully qualified Names
Simple Names
Descriptors
Fully qualified names

Source Code:
–

Class File:
–
13
java.lang.Thread
java/lang/Thread
Simple names

Constant Pool Eintrag der auf die Methode
String toString() verweist:
–

Constant Pool Eintrag der auf das Feld
java.io.PrintStram out verweist:
–
14
„toString“
„out“
Descriptors
FieldDescriptor:
FieldType
ComponentType:
FieldType
FieldType:
BaseType
ObjectType
ArrayType
BaseType:
B
C
D
F
I
J
S
Z
15
ObjectType:
L<classname>
ArrayType:
[ ComponentType
MethodDesciptor:
( ParameterDesciptor * ) ReturnDesciptor
ObjectType
ArrayType
ParameterDesciptor:
FieldType
ReturnDesciptor:
FieldType
V
Beispiele - Field Desciptor
int i;

long [][] windingRoad; 
java.lang.Object[] stuff 
16
I
[[J
[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

17
Überblick




18
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
19
Constant Pool - Tag











20
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;
}
21
CONSTANT_NameAndType
CONSTANT_NameAndType_info{
U1 tag;
U2 name_index;
U2 desciptor_index;
}
22
CONSTANT_UTF8
CONSTANT_utf8_info{
U1 tag;
U2 length;
U2 bytes[length];
}
23
Überblick




24
Klassendatei 
Spezielle Strings 
Constant Pool 
Attribute
Attribute









25
Code
ConstantValue
Deprecated
Exceptions
InnerClasses
LineNumberTable
LocalVariableTable
SourceFile
Synthetic
ConstantValue
ConstantValue_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 constantvalue_index;
}
26
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]:
}
27
LocalVariableTable
LocalVariableTable _attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_table_length;
{ u2 start_pc;
u2 length;
u2 name_index;
u2 name_index;
u2 descriptor_index;
u2 index;
} local_variable_table[local_variable_table_length]:
}
28
Danke für Ihre Aufmerksamkeit!
29
Herunterladen