ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
설명 글 보러가기
2
offsetvalueanalysis
class file header
3
000000cafebabemagic = ca fe ba be
매직넘버 : 자바 클래스파일을 다른 파일과 빠르게 구분하기 위한 특수 코드
4
0000040003minor version = 3
파일 포맷 버전 (Java 2 : 45.3 ~ 46.0, 이전 : 45.3)
5
000006002dmajor version = 45
constant pool
6
000008001d29 constants
0번 상수는 가상머신에 의해 예약되어 있으므로 사용되지 않는다.
7
00000a0a0006000f1. Methodref class #6 name-and-type #15constant tag (8bits)
8
00000f09001000112. Fieldref class #16 name-and-type #17tagstypeformatmean
9
0000140800123. String #181UTF82바이트의 부호 없는 정수 바이트바이트 텍스트 길이
10
0000170a001300144. Methodref class #19 name-and-type #202사용되지 않음
11
00001c0700155. Class name #213Integer4바이트의 부호 있는 정수int 상수
12
00001f0700166. Class name #224Float4바이트의 부동 소수점 실수float 상수
13
000022010006
7. UTF length=6
5Long8바이트의 부호 있는 long 정수long 상수
14
0000253c696e69743e<init>6Double8바이트의 배정도 실수double 상수
15
00002b010003
8. UTF length=3
7Class2바이트의 UTF8 인덱스클래스의 이름
16
00002e282956()V8String2바이트의 UTF8 인덱스String 상수
17
000031010004
9. UTF length=4
9Fieldref2바이트의 Class 인덱스필드를 포함하는 클래스
18
000034436f6465Code2바이트의 NameAndType 인덱스필드의 이름과 타입
19
00003801000f
10. UTF length=15
10Methodref2바이트의 Class 인덱스메서드를 포함하는 클래스
20
00003b4c696e654e756d6265725461626c65LineNumberTable2바이트의 NameAndType 인덱스메서드의 이름과 타입
21
00004a010004
11. UTF length=4
11Interface Methodref2바이트의 Class 인덱스메서드를 포함하는 인터페이스
22
00004d6d61696emain2바이트의 NameAndType 인덱스메서드의 이름과 타입
23
000051010016
12. UTF length=22
12NameAndType2바이트의 UTF8 인덱스필드나 메서드의 이름
24
000054285b4c6a6176612f6c616e672f537472696e673b2956
([Ljava/lang/String;)V
2바이트의 UTF8 인덱스타입 설명자
25
00006a01000a
13. UTF length=10
26
00006d536f7572636546696c65SourceFile
UTF8 entry
27
00007701000a
14. UTF length=10
스트링 값이나 메서드의 이름과 같은 가변 길이 정보를 저장하기 위하여 다른 상수에 의해 사용된다.
28
00007a48656c6c6f2e6a617661Hello.java
데이터의 길이를 의미하는 2바이트로 시작되며 그 다음에 실제 데이터 바이트가 온다.
29
0000840c00070008
15. NameAndType name #7 descriptor #8
아스키가 아닌 문자는 127보다 큰 값을 가지므로 2~3개의 바이트를 사용하여 표현된다.
30
000089070017
16. Class name #23
31
00008c0c00180019
17. NameAndType name #24 descriptor #25
Constant entry
32
00009101000c
18. UTF length=12
8. String : 2bytes : UTF8 상수를 참조하는 16비트 부호 없는 정수
33
00009448656c6c6f2c20776f726c64Hello, world
3, 4, 5, 6 : number constant
34
0000a007001a
19. Class name #26
Integer, Long : 32bits, 64bits를 사용하며, 2의 보수인 부호 있는 정수
35
0000a30c001b001c
20. NameAndType name #27 descriptor #28
Float, Double : 32bits, 64bits를 사용하며, IEEE 754 floating point format을 따르는 실수
36
0000a8010005
21. UTF length=5
FloatDouble
37
0000ab48656c6c6fHello부호1bit1bit
38
0000b0010010
22. UTF length=16
지수8bits11bits
39
0000b36a6176612f6c616e672f4f626a656374java/lang/Object가수23bits52bits
40
0000c3010010
23. UTF length=16
(2^23+만)x2^(지-150)(2^52+만)x2^(지-1075)
41
0000c66a6176612f6c616e672f53797374656djava/lang/System
42
0000d6010003
24. UTF length=3
Field, Method, Class entry
43
0000d96f7574out
각각 다른 상수를 가리키는 2개의 값으로 이루어진다.
44
0000dc010015
25. UTF length=21
2bytes : 포함하는 클래스]
45
0000df4c6a6176612f696f2f5072696e7453747265616d3b
Ljava/io/PrintStream;
2bytes : 이름과 설명자를 저장하는 NameAndType 상수
46
0000f4010013
26. UTF length=19
47
0000f76a6176612f696f2f5072696e7453747265616djava/io/PrintStream
class information
48
00010a010007
27. UTF length=7
class access flag (16bits)
49
00010d7072696e746c6eprintlnbitnamemean
50
000114010015
28. UTF length=21
1ACC_PUBLICpublic class
51
000117284c6a6176612f6c616e672f537472696e673b2956(Ljava/lang/String;)V5ACC_FINALfinal class
52
00012c0021
access_flags = 33
6ACC_SUPERsuper ( not super class )
53
00012e0005
this = #5
10ACC_INTERFACEinterface
54
0001300006
super = #6
12ACC_ABSTRACTabstract class
55
0001320000
0 interfaces
56
0001340000
0 fields
fields and methods
57
0001360002
2 methods
field or method access flag (16bits)
58
Method 0:
bitnamemean
59
0001380001
access flags = 1
1ACC_PUBLICpublic field or method
60
00013a0007
name = #7<<init>>
2ACC_PRIVATEprivate field or method
61
00013c0008
descriptor = #8<()V>
3ACC_PROTECTEDprotedted field or method
62
00013e0001
1 field/method attributes:
4ACC_STATICstatic field or method
63
field/method attribute 0
5ACC_FINALfinal field of method
64
0001400009
name = #9<Code>
6ACC_SYNCHRONIZEDsynchronized method
65
0001420000001d
length = 29
7ACC_VOLATILEvolatile field
66
0001460001
max stack: 1
8ACC_TRANSSIENTtransient method
67
0001480001
max locals: 1
9ACC_NATIVEnative method
68
00014a00000005
code length: 5
12ACC_ABSTRACTabstract method
69
00014e2a
0 aload_0
70
00014fb70001
1 invokespecial #1
Field와 Method는 동일한 형태를 이루고 있다.
71
000152b1
4 return
72
0001530000
0 exception table entries:
method 0 는 생성자이며 Java Compiler에 의해 자동 생성되었다.
73
0001550001
1 code attributes:
00014e 에 의해 지역변수 0에 저장된 자신을 인자로 수퍼클래스의 생성자를 호출한다.
74
code attribute 0:
디버거에서 사용하기 위해 실제 소스에는 없지만 LineNumber가 추가된다.
75
000157000a
name = #10<LineNumberTable>
모든 명령어는 첫 번째 줄의 클래스 시작 부분으로 매핑된다.
76
00015900000006
length = 6
77
Line number table:
start pc와 Line number를 2bytes로 표현한다.
78
00015d0001
length = 1
따라서 자바 소스 파일의 크기는 65,535라인, 한 메서드의 바이트 코드는 64Kbytes로 제한된다.
79
00015f00000001
start pc: 0 line number: 1
80
Method 1:
main method analizing
81
0001630009
access flags = 9
access flags : public static
82
000165000b
name = #11<main>
method name : main
83
000167000c
descriptor = #12<([Ljava/lang/String;)V>
return type : void, input value : java.lang.String[]
84
0001690001
1 field/method attributes:
85
field/method attribute 0
메서드는 대개 메서드의 구현을 저장하는 하나의 속성을 가지며, 필드는 대개 속성을 갖지 않는다.
86
00016b0009
name = #9<Code>
attribute name : Code
87
00016d00000025
length = 37
88
0001710002
max stack: 2
89
0001730001
max locals: 1
90
00017500000009
code length: 9
메서드의 실제 코드 (code length : 9bytes)
91
000179b20002
0 getstatic #2
virtual machine opcode + input value
92
00017c1203
3 ldc #3
ldc
인자 1byte(0~255)로 상수 참조를 한다(Integer, Float, String 상수만 가능).
93
00017eb60004
5 invokevirtual #4
ldc_w
2바이트를 사용하기 위해 사용되며 모든 유형의 상수 풀 엔트리를 참조할 수 잇다.
94
000181b1
8 return
95
0001820000
0 exception table entries:
exception handler table (empty)
96
0001840001
1 code attributes:
Code 속성 자체에 대한 속성, 디버깅 정보가 포함된다.
97
code attribute 0:
98
000186000a
name = #10<LineNumberTable>
attribute name : LineNumberTable
99
0001880000000a
length = 10
100
Line number table: