3. クラスファイル構造
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];
}
12年12月29日土曜日
4. magic
ClassFile { マジックナンバー
u4 magic; 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;
attribute_info attributes[attributes_count];
}
12年12月29日土曜日
5. minor_version, major_version
ClassFile { クラスファイルのバージョン
u4 magic;
u2 minor_version; Java SE 7 = 51
u2 major_version;
u2 constant_pool_count; Java SE 6 = 50
cp_info constant_pool[constant_pool_count-1]; J2SE 5.0 = 49
u2 access_flags; J2SE 1.4 = 48
u2 this_class;
J2SE 1.3 = 47
u2 super_class;
u2 interfaces_count; J2SE 1.2 = 46
u2 interfaces[interfaces_count]; JDK 1.1 = 45∼
u2 fields_count; JDK 1.0 = 45∼45.3
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
12年12月29日土曜日
6. constant_pool_count
ClassFile { constant_poolのエントリー数+1
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];
}
12年12月29日土曜日
7. constant_pool
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];
}
12年12月29日土曜日
8. access_flags
ClassFile { このクラスのアクセス宣言
u4 magic;
u2 minor_version; ACC_PUBLIC
u2 major_version;
u2 constant_pool_count; ACC_FINAL
cp_info constant_pool[constant_pool_count-1]; ACC_SUPER
u2 access_flags; ACC_INTERFACE
u2 this_class;
ACC_ABSTRACT
u2 super_class;
u2 interfaces_count; ACC_SYNTHETIC
u2 interfaces[interfaces_count]; ACC_ANNOTATION
u2 fields_count; ACC_ENUM
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
12年12月29日土曜日
9. this_class
ClassFile { このクラスを表すconstant_poolの
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];
}
12年12月29日土曜日
10. super_class
ClassFile { このクラスの親クラスを表す
u4 magic; constant_poolのエントリのイン
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];
}
12年12月29日土曜日
11. interfaces_count
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];
}
12年12月29日土曜日
12. interfaces
ClassFile { このクラスが実装するインターフェ
u4 magic; イスのconstant_poolのインデッ
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];
}
12年12月29日土曜日
13. fields_count
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];
}
12年12月29日土曜日
14. fields
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];
}
12年12月29日土曜日
15. methods_count
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];
}
12年12月29日土曜日
16. method
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];
}
12年12月29日土曜日
17. attributes_count
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];
}
12年12月29日土曜日
18. attributes
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];
}
12年12月29日土曜日
28. field
field_info { フィールド1つ分を表す構造体
u2 access_flags; name_indexはフィールド名の
u2 name_index;
CONSTANT_Utf8へのインデック
u2 descriptor_index;
u2 attributes_count; ス
attribute_info attributes[attributes_count];
} descriptor_indexは型名の
CONSTANT_Utf8へのインデック
ス
attributesはこのフィールドの持つ
属性の配列
12年12月29日土曜日
29. フィールドの属性
フィールドの持てる属性は以下の6種類
ConstantValue
フィールドの初期値
Synthetic
A class member that does not appear in the source code must be marked using a Synthetic attribute
Signature (Java SE 5.0)
総称型を含めたフィールドの型情報
Deprecated
@deprecated
RuntimeVisibleAnnotations (Java SE 5.0)
RetentionPolicy.SOURCEまたはRetentionPolicy.CLASSなアノテーション
RuntimeInvisibleAnnotations (Java SE 5.0)
RetentionPolicy.RUNTIMEなアノテーション
12年12月29日土曜日
34. code
Code_attribute { max_stack
u2 attribute_name_index; メソッドの使用する最大オペラ
u4 attribute_length;
ンドスタックサイズ
u2 max_stack;
u2 max_locals;
u4 code_length; max_loacls
u1 code[code_length]; メソッド内の最大ローカル変数
u2 exception_table_length;
{ u2 start_pc; 数
u2 end_pc;
u2 handler_pc; code
u2 catch_type;
メソッドのコード本体
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count]; exception_table
} 例外テーブル
12年12月29日土曜日
43. コード属性の属性
コード属性の持てる属性は以下の4種類
LineNumberTable
PCと元のソースコードの行番号の対応付け
LocalVariableTable
ローカル変数の情報
LocalVariableTypeTable (Java SE 5.0)
総称型を含めたローカル変数の情報
StackMapTable (Java SE 6)
クラスローダがクラスを読み込むときの検証を高速化するために使用
This attribute is used during the process of verification by typechecking ( 4.10.1).
12年12月29日土曜日
45. LocalVariableTable
LocalVariableTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_table_length;
{ u2 start_pc;
u2 length;
u2 name_index;
u2 descriptor_index;
u2 index;
} local_variable_table[local_variable_table_length];
}
12年12月29日土曜日
46. LocalVariableTypeTable
LocalVariableTypeTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_type_table_length;
{ u2 start_pc;
u2 length;
u2 name_index;
u2 signature_index;
u2 index;
} local_variable_type_table[local_variable_type_table_length];
}
12年12月29日土曜日
47. クラスの属性
クラスの持てる属性は以下の10種類
InnerClasses
インナークラス
EnclosingMethod
無名クラス
Synthetic
Signature (Java SE 5.0)
SourceFile
SourceDebugExtension
Deprecated
RuntimeVisibleAnnotations (Java SE 5.0)
RuntimeInvisibleAnnotations (Java SE 5.0)
BootstrapMethods (Java SE 7)
12年12月29日土曜日