1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

Post on 06-Apr-2016

215 views 0 download

Transcript of 1 JAVA - KLASSENDATEIEN Seminarvortrag von Studierach Beatrix.

1

JAVA - KLASSENDATEIEN

Seminarvortrag von Studierach Beatrix

2

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

3

Class-File

Programm in Java

Programm in anderer

Sprache

Programm in Java

Compiler

Compiler

Compiler

JavaclassfilesJavaclassfiles

Other binary format

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

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

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.

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

}

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

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

}

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

11

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

12

Spezielle Strings

Fully qualified Names Simple Names Descriptors

13

Fully qualified names

Source Code:– java.lang.Thread

Class File:– java/lang/Thread

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“

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

16

Beispiele - Field Desciptor

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

[Ljava/lang/Object

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

18

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

19

Constant Pool – Allgemeines Format

cp_ info {u1 tag; u1 info[];

}

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

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

21

Constant_Class

CONSTANT_Class_info{U1 tag;U2 name_index;

}

22

CONSTANT_NameAndType

CONSTANT_NameAndType_info{U1 tag;U2 name_index;U2 desciptor_index;

}

23

CONSTANT_UTF8

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

}

24

Überblick

Klassendatei Spezielle Strings Constant Pool Attribute

25

Attribute

Code ConstantValue Deprecated Exceptions InnerClasses LineNumberTable LocalVariableTable SourceFile Synthetic

26

ConstantValue

ConstantValue_attribute {u2 attribute_name_index;u4 attribute_length;u2 constantvalue_index;

}

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

}

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

}

29

Danke für Ihre Aufmerksamkeit!