1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

29
1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix

Transcript of 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

Page 1: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

1

JAVA - KLASSENDATEIEN

Seminarvortrag von Studierach Beatrix

Page 2: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

2

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

Page 3: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

3

Class-File

Programm in Java

Programm in anderer

Sprache

Programm in Java

Compiler

Compiler

Compiler

JavaclassfilesJavaclassfiles

Other binary format

Page 4: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

4

Typen

1. PRIMITIVE TYPEN: u1 ...1 unsigned byte u2 ... 2 unsigned bytes u4 ... 4 unsigned bytes u8 ... 8 unsigned bytes

2. TABELLENNAME

Big Endian

Page 5: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

5

Klassendatei - StrukturClassFile{

u4 magic;u2 minor_version;u2 major_version;u2 constant_pool_count;cp_info constant_pool [constant_pool_count-1];u2 access_flagsu2 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

Page 6: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

6

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.

Page 7: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

7

Klassendatei - StrukturClassFile{

u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count;cp_info constant_pool [constant_pool_count-1];u2 access_flagsu2 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];

}

Page 8: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

8

Constant Pool

Tag: CONSTANT_Class

name_index: 7

Tag: CONSTANT_Utf8_info

length: 3

This_class: 1

bytes: „Act“

constant_poolEntry #1

constant_poolEntry #7

this class

Page 9: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

9

Klassendatei - StrukturClassFile{

u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool [constant_pool_count-1]; u2 access_flagsu2 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];

}

Page 10: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

10

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

Page 11: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

11

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

Page 12: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

12

Spezielle Strings

Fully qualified Names Simple Names Descriptors

Page 13: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

13

Fully qualified names

Source Code:– java.lang.Thread

Class File:– java/lang/Thread

Page 14: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

14

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“

Page 15: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

15

DescriptorsFieldDescriptor:

FieldTypeComponentType:

FieldTypeFieldType:

BaseTypeObjectTypeArrayType

BaseType:B C D F I J S Z

ObjectType:L<classname>

ArrayType:[ ComponentType

MethodDesciptor:( ParameterDesciptor * ) ReturnDesciptorObjectTypeArrayType

ParameterDesciptor:FieldType

ReturnDesciptor:FieldTypeV

Page 16: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

16

Beispiele - Field Desciptor

int i; Ilong [][] windingRoad; [[Jjava.lang.Object[] stuff

[Ljava/lang/Object

Page 17: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

17

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

Page 18: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

18

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

Page 19: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

19

Constant Pool – Allgemeines Format

cp_ info {u1 tag; u1 info[];

}

tag – Indikator für Typ des Eintragsinfo – Inhalt variert mit Wert des Tags

Page 20: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

20

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

Page 21: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

21

Constant_Class

CONSTANT_Class_info{U1 tag;U2 name_index;

}

Page 22: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

22

CONSTANT_NameAndType

CONSTANT_NameAndType_info{U1 tag;U2 name_index;U2 desciptor_index;

}

Page 23: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

23

CONSTANT_UTF8

CONSTANT_utf8_info{U1 tag;U2 length;U2 bytes[length];

}

Page 24: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

24

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

Page 25: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

25

Attribute

Code ConstantValue Deprecated Exceptions InnerClasses LineNumberTable LocalVariableTable SourceFile Synthetic

Page 26: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

26

ConstantValue

ConstantValue_attribute {u2 attribute_name_index;u4 attribute_length;u2 constantvalue_index;

}

Page 27: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

27

CodeCode_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]:

}

Page 28: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

28

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]:

}

Page 29: 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

29

Danke für Ihre Aufmerksamkeit!