A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 설명 글 보러가기 | |||||||||||||||||||||||||
2 | offset | value | analysis | class file header | ||||||||||||||||||||||
3 | 000000 | cafebabe | magic = ca fe ba be | 매직넘버 : 자바 클래스파일을 다른 파일과 빠르게 구분하기 위한 특수 코드 | ||||||||||||||||||||||
4 | 000004 | 0003 | minor version = 3 | 파일 포맷 버전 (Java 2 : 45.3 ~ 46.0, 이전 : 45.3) | ||||||||||||||||||||||
5 | 000006 | 002d | major version = 45 | constant pool | ||||||||||||||||||||||
6 | 000008 | 001d | 29 constants | 0번 상수는 가상머신에 의해 예약되어 있으므로 사용되지 않는다. | ||||||||||||||||||||||
7 | 00000a | 0a0006000f | 1. Methodref class #6 name-and-type #15 | constant tag (8bits) | ||||||||||||||||||||||
8 | 00000f | 0900100011 | 2. Fieldref class #16 name-and-type #17 | tags | type | format | mean | |||||||||||||||||||
9 | 000014 | 080012 | 3. String #18 | 1 | UTF8 | 2바이트의 부호 없는 정수 바이트 | 바이트 텍스트 길이 | |||||||||||||||||||
10 | 000017 | 0a00130014 | 4. Methodref class #19 name-and-type #20 | 2 | 사용되지 않음 | |||||||||||||||||||||
11 | 00001c | 070015 | 5. Class name #21 | 3 | Integer | 4바이트의 부호 있는 정수 | int 상수 | |||||||||||||||||||
12 | 00001f | 070016 | 6. Class name #22 | 4 | Float | 4바이트의 부동 소수점 실수 | float 상수 | |||||||||||||||||||
13 | 000022 | 010006 | 7. UTF length=6 | 5 | Long | 8바이트의 부호 있는 long 정수 | long 상수 | |||||||||||||||||||
14 | 000025 | 3c696e69743e | <init> | 6 | Double | 8바이트의 배정도 실수 | double 상수 | |||||||||||||||||||
15 | 00002b | 010003 | 8. UTF length=3 | 7 | Class | 2바이트의 UTF8 인덱스 | 클래스의 이름 | |||||||||||||||||||
16 | 00002e | 282956 | ()V | 8 | String | 2바이트의 UTF8 인덱스 | String 상수 | |||||||||||||||||||
17 | 000031 | 010004 | 9. UTF length=4 | 9 | Fieldref | 2바이트의 Class 인덱스 | 필드를 포함하는 클래스 | |||||||||||||||||||
18 | 000034 | 436f6465 | Code | 2바이트의 NameAndType 인덱스 | 필드의 이름과 타입 | |||||||||||||||||||||
19 | 000038 | 01000f | 10. UTF length=15 | 10 | Methodref | 2바이트의 Class 인덱스 | 메서드를 포함하는 클래스 | |||||||||||||||||||
20 | 00003b | 4c696e654e756d6265725461626c65 | LineNumberTable | 2바이트의 NameAndType 인덱스 | 메서드의 이름과 타입 | |||||||||||||||||||||
21 | 00004a | 010004 | 11. UTF length=4 | 11 | Interface Methodref | 2바이트의 Class 인덱스 | 메서드를 포함하는 인터페이스 | |||||||||||||||||||
22 | 00004d | 6d61696e | main | 2바이트의 NameAndType 인덱스 | 메서드의 이름과 타입 | |||||||||||||||||||||
23 | 000051 | 010016 | 12. UTF length=22 | 12 | NameAndType | 2바이트의 UTF8 인덱스 | 필드나 메서드의 이름 | |||||||||||||||||||
24 | 000054 | 285b4c6a6176612f6c616e672f537472696e673b2956 | ([Ljava/lang/String;)V | 2바이트의 UTF8 인덱스 | 타입 설명자 | |||||||||||||||||||||
25 | 00006a | 01000a | 13. UTF length=10 | |||||||||||||||||||||||
26 | 00006d | 536f7572636546696c65 | SourceFile | UTF8 entry | ||||||||||||||||||||||
27 | 000077 | 01000a | 14. UTF length=10 | 스트링 값이나 메서드의 이름과 같은 가변 길이 정보를 저장하기 위하여 다른 상수에 의해 사용된다. | ||||||||||||||||||||||
28 | 00007a | 48656c6c6f2e6a617661 | Hello.java | 데이터의 길이를 의미하는 2바이트로 시작되며 그 다음에 실제 데이터 바이트가 온다. | ||||||||||||||||||||||
29 | 000084 | 0c00070008 | 15. NameAndType name #7 descriptor #8 | 아스키가 아닌 문자는 127보다 큰 값을 가지므로 2~3개의 바이트를 사용하여 표현된다. | ||||||||||||||||||||||
30 | 000089 | 070017 | 16. Class name #23 | |||||||||||||||||||||||
31 | 00008c | 0c00180019 | 17. NameAndType name #24 descriptor #25 | Constant entry | ||||||||||||||||||||||
32 | 000091 | 01000c | 18. UTF length=12 | 8. String : 2bytes : UTF8 상수를 참조하는 16비트 부호 없는 정수 | ||||||||||||||||||||||
33 | 000094 | 48656c6c6f2c20776f726c64 | Hello, world | 3, 4, 5, 6 : number constant | ||||||||||||||||||||||
34 | 0000a0 | 07001a | 19. Class name #26 | Integer, Long : 32bits, 64bits를 사용하며, 2의 보수인 부호 있는 정수 | ||||||||||||||||||||||
35 | 0000a3 | 0c001b001c | 20. NameAndType name #27 descriptor #28 | Float, Double : 32bits, 64bits를 사용하며, IEEE 754 floating point format을 따르는 실수 | ||||||||||||||||||||||
36 | 0000a8 | 010005 | 21. UTF length=5 | Float | Double | |||||||||||||||||||||
37 | 0000ab | 48656c6c6f | Hello | 부호 | 1bit | 1bit | ||||||||||||||||||||
38 | 0000b0 | 010010 | 22. UTF length=16 | 지수 | 8bits | 11bits | ||||||||||||||||||||
39 | 0000b3 | 6a6176612f6c616e672f4f626a656374 | java/lang/Object | 가수 | 23bits | 52bits | ||||||||||||||||||||
40 | 0000c3 | 010010 | 23. UTF length=16 | 값 | (2^23+만)x2^(지-150) | (2^52+만)x2^(지-1075) | ||||||||||||||||||||
41 | 0000c6 | 6a6176612f6c616e672f53797374656d | java/lang/System | |||||||||||||||||||||||
42 | 0000d6 | 010003 | 24. UTF length=3 | Field, Method, Class entry | ||||||||||||||||||||||
43 | 0000d9 | 6f7574 | out | 각각 다른 상수를 가리키는 2개의 값으로 이루어진다. | ||||||||||||||||||||||
44 | 0000dc | 010015 | 25. UTF length=21 | 2bytes : 포함하는 클래스] | ||||||||||||||||||||||
45 | 0000df | 4c6a6176612f696f2f5072696e7453747265616d3b | Ljava/io/PrintStream; | 2bytes : 이름과 설명자를 저장하는 NameAndType 상수 | ||||||||||||||||||||||
46 | 0000f4 | 010013 | 26. UTF length=19 | |||||||||||||||||||||||
47 | 0000f7 | 6a6176612f696f2f5072696e7453747265616d | java/io/PrintStream | class information | ||||||||||||||||||||||
48 | 00010a | 010007 | 27. UTF length=7 | class access flag (16bits) | ||||||||||||||||||||||
49 | 00010d | 7072696e746c6e | println | bit | name | mean | ||||||||||||||||||||
50 | 000114 | 010015 | 28. UTF length=21 | 1 | ACC_PUBLIC | public class | ||||||||||||||||||||
51 | 000117 | 284c6a6176612f6c616e672f537472696e673b2956 | (Ljava/lang/String;)V | 5 | ACC_FINAL | final class | ||||||||||||||||||||
52 | 00012c | 0021 | access_flags = 33 | 6 | ACC_SUPER | super ( not super class ) | ||||||||||||||||||||
53 | 00012e | 0005 | this = #5 | 10 | ACC_INTERFACE | interface | ||||||||||||||||||||
54 | 000130 | 0006 | super = #6 | 12 | ACC_ABSTRACT | abstract class | ||||||||||||||||||||
55 | 000132 | 0000 | 0 interfaces | |||||||||||||||||||||||
56 | 000134 | 0000 | 0 fields | fields and methods | ||||||||||||||||||||||
57 | 000136 | 0002 | 2 methods | field or method access flag (16bits) | ||||||||||||||||||||||
58 | Method 0: | bit | name | mean | ||||||||||||||||||||||
59 | 000138 | 0001 | access flags = 1 | 1 | ACC_PUBLIC | public field or method | ||||||||||||||||||||
60 | 00013a | 0007 | name = #7<<init>> | 2 | ACC_PRIVATE | private field or method | ||||||||||||||||||||
61 | 00013c | 0008 | descriptor = #8<()V> | 3 | ACC_PROTECTED | protedted field or method | ||||||||||||||||||||
62 | 00013e | 0001 | 1 field/method attributes: | 4 | ACC_STATIC | static field or method | ||||||||||||||||||||
63 | field/method attribute 0 | 5 | ACC_FINAL | final field of method | ||||||||||||||||||||||
64 | 000140 | 0009 | name = #9<Code> | 6 | ACC_SYNCHRONIZED | synchronized method | ||||||||||||||||||||
65 | 000142 | 0000001d | length = 29 | 7 | ACC_VOLATILE | volatile field | ||||||||||||||||||||
66 | 000146 | 0001 | max stack: 1 | 8 | ACC_TRANSSIENT | transient method | ||||||||||||||||||||
67 | 000148 | 0001 | max locals: 1 | 9 | ACC_NATIVE | native method | ||||||||||||||||||||
68 | 00014a | 00000005 | code length: 5 | 12 | ACC_ABSTRACT | abstract method | ||||||||||||||||||||
69 | 00014e | 2a | 0 aload_0 | |||||||||||||||||||||||
70 | 00014f | b70001 | 1 invokespecial #1 | Field와 Method는 동일한 형태를 이루고 있다. | ||||||||||||||||||||||
71 | 000152 | b1 | 4 return | |||||||||||||||||||||||
72 | 000153 | 0000 | 0 exception table entries: | method 0 는 생성자이며 Java Compiler에 의해 자동 생성되었다. | ||||||||||||||||||||||
73 | 000155 | 0001 | 1 code attributes: | 00014e 에 의해 지역변수 0에 저장된 자신을 인자로 수퍼클래스의 생성자를 호출한다. | ||||||||||||||||||||||
74 | code attribute 0: | 디버거에서 사용하기 위해 실제 소스에는 없지만 LineNumber가 추가된다. | ||||||||||||||||||||||||
75 | 000157 | 000a | name = #10<LineNumberTable> | 모든 명령어는 첫 번째 줄의 클래스 시작 부분으로 매핑된다. | ||||||||||||||||||||||
76 | 000159 | 00000006 | length = 6 | |||||||||||||||||||||||
77 | Line number table: | start pc와 Line number를 2bytes로 표현한다. | ||||||||||||||||||||||||
78 | 00015d | 0001 | length = 1 | 따라서 자바 소스 파일의 크기는 65,535라인, 한 메서드의 바이트 코드는 64Kbytes로 제한된다. | ||||||||||||||||||||||
79 | 00015f | 00000001 | start pc: 0 line number: 1 | |||||||||||||||||||||||
80 | Method 1: | main method analizing | ||||||||||||||||||||||||
81 | 000163 | 0009 | access flags = 9 | access flags : public static | ||||||||||||||||||||||
82 | 000165 | 000b | name = #11<main> | method name : main | ||||||||||||||||||||||
83 | 000167 | 000c | descriptor = #12<([Ljava/lang/String;)V> | return type : void, input value : java.lang.String[] | ||||||||||||||||||||||
84 | 000169 | 0001 | 1 field/method attributes: | |||||||||||||||||||||||
85 | field/method attribute 0 | 메서드는 대개 메서드의 구현을 저장하는 하나의 속성을 가지며, 필드는 대개 속성을 갖지 않는다. | ||||||||||||||||||||||||
86 | 00016b | 0009 | name = #9<Code> | attribute name : Code | ||||||||||||||||||||||
87 | 00016d | 00000025 | length = 37 | |||||||||||||||||||||||
88 | 000171 | 0002 | max stack: 2 | |||||||||||||||||||||||
89 | 000173 | 0001 | max locals: 1 | |||||||||||||||||||||||
90 | 000175 | 00000009 | code length: 9 | 메서드의 실제 코드 (code length : 9bytes) | ||||||||||||||||||||||
91 | 000179 | b20002 | 0 getstatic #2 | virtual machine opcode + input value | ||||||||||||||||||||||
92 | 00017c | 1203 | 3 ldc #3 | ldc | 인자 1byte(0~255)로 상수 참조를 한다(Integer, Float, String 상수만 가능). | |||||||||||||||||||||
93 | 00017e | b60004 | 5 invokevirtual #4 | ldc_w | 2바이트를 사용하기 위해 사용되며 모든 유형의 상수 풀 엔트리를 참조할 수 잇다. | |||||||||||||||||||||
94 | 000181 | b1 | 8 return | |||||||||||||||||||||||
95 | 000182 | 0000 | 0 exception table entries: | exception handler table (empty) | ||||||||||||||||||||||
96 | 000184 | 0001 | 1 code attributes: | Code 속성 자체에 대한 속성, 디버깅 정보가 포함된다. | ||||||||||||||||||||||
97 | code attribute 0: | |||||||||||||||||||||||||
98 | 000186 | 000a | name = #10<LineNumberTable> | attribute name : LineNumberTable | ||||||||||||||||||||||
99 | 000188 | 0000000a | length = 10 | |||||||||||||||||||||||
100 | Line number table: |