1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
|
#
# sample small-but-valid classfile
#
cafe babe # magic
0000 # minor_version
002e # major_version
0017 # constant_pool_count
#
# constant_pool
#
07 0003 # 0001: class[Small]
07 0004 # 0002: class[java/lang/Object]
01 0005 "Small" # 0003: utf8["Small"]
01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
01 0005 "blort" # 0005: utf8["blort"]
01 0003 "()V" # 0006: utf8["()V"]
01 0004 "Code" # 0007: utf8["Code"]
08 0003 # 0008: string["Small"]
03 12345678 # 0009: integer[0x12345678]
04 42f6e666 # 000a: float[123.45]
05 12345678 9abcdef0 # 000b: long[0x1234567890abcdef0]
06 41195895 5f8a0903 # 000d: double[415269.3433]
01 0005 "blort" # 000f: utf8["blort"]
01 0007 "x/y/Zzz" # 0010: utf8["x/y/Zzz"]
01 0003 "()V" # 0011: utf8["()V"]
0c 000f 0010 # 0012: nat[blort:x/y/Zzz]
0c 000f 0011 # 0013: nat[blort:()V]
09 0001 0012 # 0014: field[Small.blort:x/y/Zzz]
0a 0001 0013 # 0015: method[Small.blort:()V]
0b 0001 0013 # 0016: ifaceMethod[Small.blort:()V]
0001 # access_flags
0001 # this_class
0002 # super_class
0000 # interfaces_count
0000 # fields_count
0001 # methods_count
# methods[0]
0001 # access_flags
0005 # name
0006 # descriptor
0001 # attributes_count
# attributes[0]
0007 # name
000001db # length (note: == code_length + 0x0c)
0001 # max_stack
0001 # max_locals
000001cf # code_length
00 # 0000: nop
01 # 0001: aconst_null
02 # 0002: aconst_m1
03 # 0003: iconst_0
04 # 0004: iconst_1
05 # 0005: iconst_2
06 # 0006: iconst_3
07 # 0007: iconst_4
08 # 0008: iconst_5
09 # 0009: lconst_0
0a # 000a: lconst_1
0b # 000b: fconst_0
0c # 000c: fconst_1
0d # 000d: fconst_2
0e # 000e: dconst_0
0f # 000f: dconst_1
10 45 # 0010: bipush #+45
11 5432 # 0012: sipush #+5432
12 08 # 0015: ldc <string>
12 09 # 0017: ldc <integer>
12 0a # 0019: ldc <float>
13 0008 # 001b: ldc_w <string>
13 0009 # 001e: ldc_w <integer>
13 000a # 0021: ldc_w <float>
14 000b # 0024: ldc2_w <long>
14 000d # 0027: ldc2_w <double>
15 01 # 002a: iload 01
16 02 # 002c: lload 02
17 03 # 002e: fload 03
18 04 # 0030: dload 04
19 05 # 0032: aload 05
1a # 0034: iload_0
1b # 0035: iload_1
1c # 0036: iload_2
1d # 0037: iload_3
1e # 0038: lload_0
1f # 0039: lload_1
20 # 003a: lload_2
21 # 003b: lload_3
22 # 003c: fload_0
23 # 003d: fload_1
24 # 003e: fload_2
25 # 003f: fload_3
26 # 0040: dload_0
27 # 0041: dload_1
28 # 0042: dload_2
29 # 0043: dload_3
2a # 0044: aload_0
2b # 0045: aload_1
2c # 0046: aload_2
2d # 0047: aload_3
2e # 0048: iaload
2f # 0049: laload
30 # 004a: faload
31 # 004b: daload
32 # 004c: aaload
33 # 004d: baload
34 # 004e: caload
35 # 004f: saload
36 41 # 0050: istore 41
37 42 # 0052: lstore 42
38 43 # 0054: fstore 43
39 44 # 0056: dstore 44
3a 45 # 0058: astore 45
3b # 005a: istore_0
3c # 005b: istore_1
3d # 005c: istore_2
3e # 005d: istore_3
3f # 005e: lstore_0
40 # 005f: lstore_1
41 # 0060: lstore_2
42 # 0061: lstore_3
43 # 0062: fstore_0
44 # 0063: fstore_1
45 # 0064: fstore_2
46 # 0065: fstore_3
47 # 0066: dstore_0
48 # 0067: dstore_1
49 # 0068: dstore_2
4a # 0069: dstore_3
4b # 006a: astore_0
4c # 006b: astore_1
4d # 006c: astore_2
4e # 006d: astore_3
4f # 006e: iastore
50 # 006f: lastore
51 # 0070: fastore
52 # 0071: dastore
53 # 0072: aastore
54 # 0073: bastore
55 # 0074: castore
56 # 0075: sastore
57 # 0076: pop
58 # 0077: pop2
59 # 0078: dup
5a # 0079: dup_x1
5b # 007a: dup_x2
5c # 007b: dup2
5d # 007c: dup2_x1
5e # 007d: dup2_x2
5f # 007e: swap
60 # 007f: iadd
61 # 0080: ladd
62 # 0081: fadd
63 # 0082: dadd
64 # 0083: isub
65 # 0084: lsub
66 # 0085: fsub
67 # 0086: dsub
68 # 0087: imul
69 # 0088: lmul
6a # 0089: fmul
6b # 008a: dmul
6c # 008b: idiv
6d # 008c: ldiv
6e # 008d: fdiv
6f # 008e: ddiv
70 # 008f: irem
71 # 0090: lrem
72 # 0091: frem
73 # 0092: drem
74 # 0093: ineg
75 # 0094: lneg
76 # 0095: fneg
77 # 0096: dneg
78 # 0097: ishl
79 # 0098: lshl
7a # 0099: ishr
7b # 009a: lshr
7c # 009b: iushr
7d # 009c: lushr
7e # 009d: iand
7f # 009e: land
80 # 009f: ior
81 # 00a0: lor
82 # 00a1: ixor
83 # 00a2: lxor
84 05 ff # 00a3: iinc 05, #-1
85 # 00a6: i2l
86 # 00a7: i2f
87 # 00a8: i2d
88 # 00a9: l2i
89 # 00aa: l2f
8a # 00ab: l2d
8b # 00ac: f2i
8c # 00ad: f2l
8d # 00ae: f2d
8e # 00af: d2i
8f # 00b0: d2l
90 # 00b1: d2f
91 # 00b2: i2b
92 # 00b3: i2c
93 # 00b4: i2s
94 # 00b5: lcmp
95 # 00b6: fcmpl
96 # 00b7: fcmpg
97 # 00b8: dcmpl
98 # 00b9: dcmpg
99 0000 # 00ba: ifeq 00ba
9a fffd # 00bd: ifne 00ba
9b fffa # 00c0: iflt 00ba
9c fff7 # 00c3: ifge 00ba
9d fff4 # 00c6: ifgt 00ba
9e fff1 # 00c9: ifle 00ba
9f 000f # 00cc: if_icmpeq 00db
a0 000c # 00cf: if_icmpne 00db
a1 0009 # 00d2: if_icmplt 00db
a2 0006 # 00d5: if_icmpge 00db
a3 0003 # 00d8: if_icmpgt 00db
a4 0000 # 00db: if_icmple 00db
a5 0000 # 00de: if_acmpeq 00de
a6 0000 # 00e1: if_acmpne 00e1
a7 ff1c # 00e4: goto 0000
a8 0000 # 00e7: jsr 00e7
a9 2f # 00ea: ret 2f
aa 000000 # 00ec: tableswitch + padding
fffffffe # default: 000000ea
12340000 # low: 12340000
12340007 # high: 12340007
ffffff14 # [0]: 00000000
ffffff15 # [1]: 00000001
ffffff16 # [2]: 00000002
ffffff17 # [3]: 00000003
ffffff18 # [4]: 00000004
ffffff19 # [5]: 00000005
ffffff1b # [6]: 00000007
ffffff1d # [7]: 00000009
ab 000000 # 011c: lookupswitch + padding
ffffffd0 # default: 000000ec
00000004 # npairs: 4
89761234 # match[0]: 89761234
0000002c # offset[0]: 0148
00001000 # match[1]: 00001000
0000002d # offset[1]: 0149
03333333 # match[2]: 03333333
0000002d # offset[2]: 0149
79787776 # match[3]: 79787776
0000002f # offset[3]: 014b
ac # 0148: ireturn
ad # 0149: lreturn
ae # 014a: freturn
af # 014b: dreturn
b0 # 014c: areturn
b1 # 014d: return
b2 0014 # 014e: getstatic 0014
b3 0014 # 0151: putstatic 0014
b4 0014 # 0154: getfield 0014
b5 0014 # 0157: putfield 0014
b6 0015 # 015a: invokevirtual 0015
b7 0015 # 015d: invokespecial 0015
b8 0015 # 0160: invokestatic 0015
b9 0016 01 00 # 0163: invokeinterface 0016
bb 0001 # 0169: new 0001
bc 04 # 016c: newarray boolean
bc 05 # 016e: newarray char
bc 06 # 0170: newarray float
bc 07 # 0172: newarray double
bc 08 # 0174: newarray byte
bc 09 # 0176: newarray short
bc 0a # 0178: newarray int
bc 0b # 017a: newarray long
bd 0001 # 017c: anewarray 0001
be # 017f: arraylength
bf # 0180: athrow
c0 0002 # 0181: checkcast 0002
c1 0002 # 0184: instanceof 0002
c2 # 0187: monitorenter
c3 # 0188: monitorexit
c415 0123 # 0189: wide iload 0123
c416 0124 # 018d: wide lload 0124
c417 0125 # 0191: wide fload 0125
c418 0126 # 0195: wide dload 0126
c419 0127 # 0199: wide aload 0127
c436 20f0 # 019d: wide istore 20f0
c437 20f1 # 01a1: wide lstore 20f1
c438 20f2 # 01a5: wide fstore 20f2
c439 20f3 # 01a9: wide dstore 20f3
c43a 20f4 # 01ad: wide astore 20f4
c4a9 ffff # 01b1: wide ret ffff
c484 0002 1000 # 01b5: wide iinc 0002, 1000
c5 0002 04 # 01bb: multianewarray 0002, #04
c6 fe41 # 01bf: ifnull 0000
c7 0000 # 01c2: ifnonnull 01c2
c8 70000000 # 01c5: goto_w 700001c5
c9 fffffffb # 01ca: jsr_w 000001c5
ca # 01cf: <unused>
0000 # exception_table_length
0000 # attributes_count
0000 # attributes_count
|