クラスファイルの構造
クラスファイルは、クラスほぼ保存されたファイル全体の内容を作るれ、任意の中間セパレータを追加することなく、各データ項目に基づいて、バイト単位で8ビットのバイナリストリームのセットは、クラスファイル内の正確な順序にコンパクトに配置されています必要なすべてのデータが実行されて、隙間がありません。それはデータ項目になるが、8ビットバイトの上の空間を占有する必要がある場合、それは記憶のための8ビット・バイトを複数の方法のエンディアン(ビッグエンディアン)に分割されます。
なし番号(基本型)とシンボルテーブル(参照型):クラスファイルは、データの2種類のみです
マジックナンバー
ファイルの種類を確認してください。たとえば、Java用:cafababa
バージョン
JDK1.8 = 52である
JDK1.8が= 51であります
クラスファイルのバージョン
定数プール
定数型 値 CONSTANT_Class
7 CONSTANT_Fieldref
9 CONSTANT_Methodref
10 CONSTANT_InterfaceMethodref
11 CONSTANT_String
8 CONSTANT_Integer
3 CONSTANT_Float
4 CONSTANT_Long
5 CONSTANT_Double
6 CONSTANT_NameAndType
12 CONSTANT_Utf8
1 CONSTANT_MethodHandle
15 CONSTANT_MethodType
16 CONSTANT_InvokeDynamic
18
アクセスフラグ
クラスインデックス、インデックスの親クラス、インターフェイスインデックスセット
テーブルのセットのフィールド
表の収集方法
プロパティシートコレクション
クラスファイル形式
Uは、複雑な情報の代わりに基本的な情報、情報を表し、
cp_infoフォーマット:
cp_info { u1 tag; u1 info[]; }
ClassFile { u4 magic; // 魔法数字,表明当前文件是.class文件,固定0xCAFEBABE u2 minor_version; // 分别为Class文件的副版本和主版本,最小版本 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]; // 各种属性 }
(タグに対応cp_info)定数プールテーブル。
定数型 値 CONSTANT_Class
7 CONSTANT_Fieldref
9 CONSTANT_Methodref
10 CONSTANT_InterfaceMethodref
11 CONSTANT_String
8 CONSTANT_Integer
3 CONSTANT_Float
4 CONSTANT_Long
5 CONSTANT_Double
6 CONSTANT_NameAndType
12 CONSTANT_Utf8
1 CONSTANT_MethodHandle
15 CONSTANT_MethodType
16 CONSTANT_InvokeDynamic
18
参考サイト:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html
目標:手書きのコードによると、バイナリファイルをCLASS2することができます