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