33個とったよ

 

とるかとられるか、そういう世界。青で括ってあるのがコンスタントテーブルのタグで、これがせめて33個本当にあるかどうか数えてくれ。

01は文字UTF8テーブルで、私が書いたABCDEFGとか、はたまたクラス名とか、メソッド名などが列挙されている。JAVAは外部の命令をクラスローダーが読み込んで実行される、ローダーが命令を読み込むときに名前(シンボル)が必要になる、男のシンボルはシンボルロックだが、JAVAのシンボルはこのUTF8で書き込まれた文字列だ。なんと豊穣で、優雅な言語だJAVAは。JAVAの優雅さの一端を垣間見た気になり岡は部屋で一人なみだするのであつたとよ。

 

とりあえずこれを表におこしてみた

 

No

tag

 

 

1

0A

 

 

2

09

 

 

3

08

 

 

4

0A

 

 

5

07

 

 

6

07

 

 

7

01

 

<init>

8

01

 

()V

9

01

 

Code

10

01

 

LineNumberTable

11

01

 

LocalVariableTable

12

01

 

This

13

01

 

Ltest/test;

14

01

 

Main

15

01

 

([Ljava/lang/String;)V

16

01

 

Args

17

01

 

[Ljava/lang/String;

18

01

 

SourceFile

19

0C

 

 

20

07

 

 

21

0C

 

 

22

01

 

test.java

23

07

 

 

24

0C

 

 

25

01

 

ABCDEFG

26

01

 

test/test

27

01

 

java/lang/Object

28

01

 

java/lang/System

29

01

 

Out

30

01

 

Ljava/io/PrintStream;

31

01

 

java/io/PrintStream

32

01

 

Println

33

01

 

(Ljava/lang/String;)V

 

01=UTF8以外のタグで07(4つ)・08(1つ)・09(1つ)・0A(二つ).0C(二つ)があるのが分かる。

 

Constant Type

Value

CONSTANT_Class

7

CONSTANT_Fieldref

9

CONSTANT_Methodref

10

CONSTANT_String

8

CONSTANT_NameAndType

12

CONSTANT_Utf8

1

 

 

 

お洒落な画像が今回無いので、ここで小休止でイラストコーナーとする

 

ジュード・ロウ

 

とりあえず07からいってみよう

 

    CONSTANT_Class_info {
        u1 tag;
        u2 name_index;
    }
Tagはいいとしてこのname_indexは何か

今となっては中井美紀ほどの語学力を得た俺は、さらに説明を読むことにした。

とモノローグしたところで、タイトルロール・・・

 

「えんでー」

 

エンエンエーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーん(キャシャーーーーンのように)

ポリマー(真)

 

name_index

The value of the name_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure representing a valid fully qualified class or interface name (§2.8.1) encoded in internal form (§4.2).

 

たぶんこのインデックスは上から何番目かということだと思われる。

他の構造も見てみた
09
    CONSTANT_Fieldref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }

0A
    CONSTANT_Methodref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }

0C

    CONSTANT_NameAndType_info {
         u1 tag;
         u2 name_index;
         u2 descriptor_index;
    }

08

    CONSTANT_String_info {
        u1 tag;
        u2 string_index;
    }
番号をひっぱってきてみた

No

tag

Index

 

 

1

0A

0006

0014

 

2

09

0015

0016

 

3

08

0017

 

 

4

0A

0018

0019

 

5

07

001A

 

 

6

07

001B

 

 

7

01

 

 

<init>

8

01

 

 

()V