lin
2025-07-31 065ea569db06206874bbfa18eb25ff6121aec09b
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
Processing 'const-method-handle.dex'...
Opened 'const-method-handle.dex', DEX version '039'
DEX file header:
magic               : 'dex\n039\0'
checksum            : 16656a27
signature           : 1953...5aa5
file_size           : 2524
header_size         : 112
link_size           : 0
link_off            : 0 (0x000000)
string_ids_size     : 57
string_ids_off      : 112 (0x000070)
type_ids_size       : 26
type_ids_off        : 340 (0x000154)
proto_ids_size      : 18
proto_ids_off       : 444 (0x0001bc)
field_ids_size      : 2
field_ids_off       : 660 (0x000294)
method_ids_size     : 23
method_ids_off      : 676 (0x0002a4)
class_defs_size     : 2
class_defs_off      : 860 (0x00035c)
data_size           : 1588
data_off            : 936 (0x0003a8)
 
Class #0 header:
class_idx           : 5
access_flags        : 1 (0x0001)
superclass_idx      : 11
interfaces_off      : 0 (0x000000)
source_file_idx     : 29
annotations_off     : 1336 (0x000538)
class_data_off      : 2270 (0x0008de)
static_fields_size  : 0
instance_fields_size: 0
direct_methods_size : 2
virtual_methods_size: 0
 
Class #0 annotations:
Annotations on method #1 'main'
  VISIBILITY_SYSTEM Ldalvik/annotation/Throws; value={ Ljava/lang/Throwable; }
 
Class #0            -
  Class descriptor  : 'LMain;'
  Access flags      : 0x0001 (PUBLIC)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
    #0              : (in LMain;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
0003b0:                                        |[0003b0] Main.<init>:()V
0003c0: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
0003c6: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=22
      locals        : 
        0x0000 - 0x0004 reg=0 this LMain; 
 
    #1              : (in LMain;)
      name          : 'main'
      type          : '([Ljava/lang/String;)V'
      access        : 0x0009 (PUBLIC STATIC)
      code          -
      registers     : 6
      ins           : 1
      outs          : 4
      insns size    : 25 16-bit code units
0003c8:                                        |[0003c8] Main.main:([Ljava/lang/String;)V
0003d8: 7100 1500 0000                         |0000: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@0015
0003de: 0c00                                   |0003: move-result-object v0
0003e0: 1c01 0600                              |0004: const-class v1, Lconstmethodhandle/ConstTest; // type@0006
0003e4: 1a02 3000                              |0006: const-string v2, "main" // string@0030
0003e8: 6203 0100                              |0008: sget-object v3, Ljava/lang/Void;.TYPE:Ljava/lang/Class; // field@0001
0003ec: 1c04 1900                              |000a: const-class v4, [Ljava/lang/String; // type@0019
0003f0: 7120 1600 4300                         |000c: invoke-static {v3, v4}, Ljava/lang/invoke/MethodType;.methodType:(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType; // method@0016
0003f6: 0c03                                   |000f: move-result-object v3
0003f8: 6e40 1400 1032                         |0010: invoke-virtual {v0, v1, v2, v3}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@0014
0003fe: 0c00                                   |0013: move-result-object v0
000400: fa20 1200 5000 1000                    |0014: invoke-polymorphic {v0, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;)V // method@0012, proto@0010
000408: 0e00                                   |0018: return-void
      catches       : (none)
      positions     : 
        0x0000 line=26
        0x000c line=27
        0x0014 line=28
        0x0018 line=29
      locals        : 
        0x0000 - 0x0019 reg=5 (null) [Ljava/lang/String; 
 
  Virtual methods   -
  source_file_idx   : 29 (Main.java)
 
Class #1 header:
class_idx           : 6
access_flags        : 1 (0x0001)
superclass_idx      : 11
interfaces_off      : 0 (0x000000)
source_file_idx     : 3
annotations_off     : 1360 (0x000550)
class_data_off      : 2284 (0x0008ec)
static_fields_size  : 0
instance_fields_size: 0
direct_methods_size : 6
virtual_methods_size: 0
 
Class #1 annotations:
Annotations on method #3 'displayMethodHandle'
  VISIBILITY_SYSTEM Ldalvik/annotation/Throws; value={ Ljava/lang/Throwable; }
 
Class #1            -
  Class descriptor  : 'Lconstmethodhandle/ConstTest;'
  Access flags      : 0x0001 (PUBLIC)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
    #0              : (in Lconstmethodhandle/ConstTest;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
00040c:                                        |[00040c] constmethodhandle.ConstTest.<init>:()V
00041c: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
000422: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=22
      locals        : 
        0x0000 - 0x0004 reg=0 this Lconstmethodhandle/ConstTest; 
 
    #1              : (in Lconstmethodhandle/ConstTest;)
      name          : 'displayMethodHandle'
      type          : '(Ljava/lang/invoke/MethodHandle;)V'
      access        : 0x000a (PRIVATE STATIC)
      code          -
      registers     : 4
      ins           : 1
      outs          : 2
      insns size    : 47 16-bit code units
000424:                                        |[000424] constmethodhandle.ConstTest.displayMethodHandle:(Ljava/lang/invoke/MethodHandle;)V
000434: 6200 0000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0000
000438: 2201 0d00                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@000d
00043c: 7010 0c00 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@000c
000442: 1a02 1e00                              |0007: const-string v2, "MethodHandle " // string@001e
000446: 6e20 0e00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@000e
00044c: 0c01                                   |000c: move-result-object v1
00044e: 6e20 0d00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@000d
000454: 0c01                                   |0010: move-result-object v1
000456: 1a02 0000                              |0011: const-string v2, " => " // string@0000
00045a: 6e20 0e00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@000e
000460: 0c01                                   |0016: move-result-object v1
000462: 1402 0030 4046                         |0017: const v2, #float 12300 // #46403000
000468: 7110 0900 0200                         |001a: invoke-static {v2}, Ljava/lang/Float;.valueOf:(F)Ljava/lang/Float; // method@0009
00046e: 0c02                                   |001d: move-result-object v2
000470: fa20 1100 2300 0100                    |001e: invoke-polymorphic {v3, v2}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;)Ljava/lang/Class; // method@0011, proto@0001
000478: 0c02                                   |0022: move-result-object v2
00047a: 6e20 0d00 2100                         |0023: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@000d
000480: 0c01                                   |0026: move-result-object v1
000482: 6e10 0f00 0100                         |0027: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@000f
000488: 0c01                                   |002a: move-result-object v1
00048a: 6e20 0800 1000                         |002b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@0008
000490: 0e00                                   |002e: return-void
      catches       : (none)
      positions     : 
        0x0000 line=24
        0x001a line=25
        0x002b line=24
        0x002e line=26
      locals        : 
        0x0000 - 0x002f reg=3 (null) Ljava/lang/invoke/MethodHandle; 
 
    #2              : (in Lconstmethodhandle/ConstTest;)
      name          : 'displayMethodType'
      type          : '(Ljava/lang/invoke/MethodType;)V'
      access        : 0x000a (PRIVATE STATIC)
      code          -
      registers     : 4
      ins           : 1
      outs          : 2
      insns size    : 25 16-bit code units
000494:                                        |[000494] constmethodhandle.ConstTest.displayMethodType:(Ljava/lang/invoke/MethodType;)V
0004a4: 6200 0000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0000
0004a8: 2201 0d00                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@000d
0004ac: 7010 0c00 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@000c
0004b2: 1a02 1f00                              |0007: const-string v2, "MethodType " // string@001f
0004b6: 6e20 0e00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@000e
0004bc: 0c01                                   |000c: move-result-object v1
0004be: 6e20 0d00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@000d
0004c4: 0c01                                   |0010: move-result-object v1
0004c6: 6e10 0f00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@000f
0004cc: 0c01                                   |0014: move-result-object v1
0004ce: 6e20 0800 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@0008
0004d4: 0e00                                   |0018: return-void
      catches       : (none)
      positions     : 
        0x0000 line=29
        0x0018 line=30
      locals        : 
        0x0000 - 0x0019 reg=3 (null) Ljava/lang/invoke/MethodType; 
 
    #3              : (in Lconstmethodhandle/ConstTest;)
      name          : 'main'
      type          : '([Ljava/lang/String;)V'
      access        : 0x0009 (PUBLIC STATIC)
      code          -
      registers     : 2
      ins           : 1
      outs          : 1
      insns size    : 15 16-bit code units
0004d8:                                        |[0004d8] constmethodhandle.ConstTest.main:([Ljava/lang/String;)V
0004e8: 7100 0600 0000                         |0000: invoke-static {}, Lconstmethodhandle/ConstTest;.test1:()Ljava/lang/invoke/MethodHandle; // method@0006
0004ee: 0c00                                   |0003: move-result-object v0
0004f0: 7110 0300 0000                         |0004: invoke-static {v0}, Lconstmethodhandle/ConstTest;.displayMethodHandle:(Ljava/lang/invoke/MethodHandle;)V // method@0003
0004f6: 7100 0700 0000                         |0007: invoke-static {}, Lconstmethodhandle/ConstTest;.test2:()Ljava/lang/invoke/MethodType; // method@0007
0004fc: 0c00                                   |000a: move-result-object v0
0004fe: 7110 0400 0000                         |000b: invoke-static {v0}, Lconstmethodhandle/ConstTest;.displayMethodType:(Ljava/lang/invoke/MethodType;)V // method@0004
000504: 0e00                                   |000e: return-void
      catches       : (none)
      positions     : 
      locals        : 
 
    #4              : (in Lconstmethodhandle/ConstTest;)
      name          : 'test1'
      type          : '()Ljava/lang/invoke/MethodHandle;'
      access        : 0x0009 (PUBLIC STATIC)
      code          -
      registers     : 1
      ins           : 0
      outs          : 0
      insns size    : 3 16-bit code units
000508:                                        |[000508] constmethodhandle.ConstTest.test1:()Ljava/lang/invoke/MethodHandle;
000518: fe00 0000                              |0000: const-method-handle v0, method_handle@0000
00051c: 1100                                   |0002: return-object v0
      catches       : (none)
      positions     : 
      locals        : 
 
    #5              : (in Lconstmethodhandle/ConstTest;)
      name          : 'test2'
      type          : '()Ljava/lang/invoke/MethodType;'
      access        : 0x0009 (PUBLIC STATIC)
      code          -
      registers     : 1
      ins           : 0
      outs          : 0
      insns size    : 3 16-bit code units
000520:                                        |[000520] constmethodhandle.ConstTest.test2:()Ljava/lang/invoke/MethodType;
000530: ff00 1100                              |0000: const-method-type v0, (CSIJFDLjava/lang/Object;)Z // proto@0011
000534: 1100                                   |0002: return-object v0
      catches       : (none)
      positions     : 
      locals        : 
 
  Virtual methods   -
  source_file_idx   : 3 (ConstTest.java)
 
Method handle #0:
  type        : invoke-instance
  target      : Ljava/lang/Object; getClass
  target_type : (Ljava/lang/Object;)Ljava/lang/Class;