1 2method Target.<init>():void 3{ 4 .src "exitHooks.java" 5 .line 28 6 .prologue_end 7 .line 28 8 0| move-object v0, v2 9 .local v0, "this", Target 10 1| move-object v1, v0 11 2| invoke-direct {v1}, java.lang.Object.<init>():void 12 5| return-void 13} 14 15method Target.main(java.lang.String[]):void 16{ 17 .params "?" 18 .src "exitHooks.java" 19 .line 32 20 .prologue_end 21 .line 32 22 0| move-object v0, v3 23 .local v0, "args", java.lang.String[] 24 1| sget-object v1, java.lang.System.out 25 3| const-string v2, "Hello, world!\n{" 26 5| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void 27 .line 33 28 8| invoke-static {}, Target.test():void 29 .line 34 30 11| sget-object v1, java.lang.System.out 31 13| const-string v2, "}\nGood bye!" 32 15| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void 33 .line 35 34 18| return-void 35} 36 37method Target.test():void 38{ 39 .src "exitHooks.java" 40 .line 39 41 .prologue_end 42 .line 39 43 0| new-instance v1, Target 44 2| move-object v8, v1 45 3| move-object v1, v8 46 4| move-object v2, v8 47 5| invoke-direct {v2}, Target.<init>():void 48 8| move-object v0, v1 49 .line 40 50 .local v0, "obj", Target 51 9| sget-object v1, java.lang.System.out 52 11| const-string v2, "Object(true) : %s\n" 53 13| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 54 14| new-array v3, v3, java.lang.Object[] 55 16| move-object v8, v3 56 17| move-object v3, v8 57 18| move-object v4, v8 58 19| const/4 v5, #+0 (0x00000000 | 0.00000) 59 20| move-object v6, v0 60 21| const/4 v7, #+1 (0x00000001 | 1.40130e-45) 61 22| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object 62 25| move-result-object v6 63 26| aput-object v6, v4, v5 64 28| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 65 31| move-result-object v1 66 .line 41 67 32| sget-object v1, java.lang.System.out 68 34| const-string v2, "Object(false) : %s\n" 69 36| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 70 37| new-array v3, v3, java.lang.Object[] 71 39| move-object v8, v3 72 40| move-object v3, v8 73 41| move-object v4, v8 74 42| const/4 v5, #+0 (0x00000000 | 0.00000) 75 43| move-object v6, v0 76 44| const/4 v7, #+0 (0x00000000 | 0.00000) 77 45| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object 78 48| move-result-object v6 79 49| aput-object v6, v4, v5 80 51| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 81 54| move-result-object v1 82 .line 42 83 55| sget-object v1, java.lang.System.out 84 57| const-string v2, "double : %s\n" 85 59| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 86 60| new-array v3, v3, java.lang.Object[] 87 62| move-object v8, v3 88 63| move-object v3, v8 89 64| move-object v4, v8 90 65| const/4 v5, #+0 (0x00000000 | 0.00000) 91 66| move-object v6, v0 92 67| const/4 v7, #+3 (0x00000003 | 4.20390e-45) 93 68| invoke-virtual {v6,v7}, Target.testDouble(int):double 94 71| move-result-wide v6:v7 95 72| invoke-static {v6,v7}, java.lang.Double.valueOf(double):java.lang.Double 96 75| move-result-object v6 97 76| aput-object v6, v4, v5 98 78| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 99 81| move-result-object v1 100 .line 43 101 82| sget-object v1, java.lang.System.out 102 84| const-string v2, "int : %s\n" 103 86| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 104 87| new-array v3, v3, java.lang.Object[] 105 89| move-object v8, v3 106 90| move-object v3, v8 107 91| move-object v4, v8 108 92| const/4 v5, #+0 (0x00000000 | 0.00000) 109 93| move-object v6, v0 110 94| const/16 v7, #+100 (0x00000064 | 1.40130e-43) 111 96| invoke-virtual {v6,v7}, Target.testInt(int):int 112 99| move-result v6 113 100| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer 114 103| move-result-object v6 115 104| aput-object v6, v4, v5 116 106| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 117 109| move-result-object v1 118 .line 44 119 110| move-object v1, v0 120 111| const/4 v2, #+1 (0x00000001 | 1.40130e-45) 121 112| invoke-virtual {v1,v2}, Target.testVoid(boolean):void 122 .line 45 123 115| return-void 124} 125 126method Target.testDouble(int):double 127{ 128 .params "?" 129 .src "exitHooks.java" 130 .line 60 131 .prologue_end 132 .line 60 133 0| move-object v0, v4 134 .local v0, "this", Target 135 1| move v1, v5 136 .local v1, "n", int 137 2| move v2, v1 138 3| packed-switch v2, Label_5 139 .line 65 140 6| const-wide v2:v3, #+4621762822593629389 (0x4023cccccccccccd | 9.90000) 141 11| move-wide v0:v1, v2:v3 142Label_1: 143 .end_local v0 144 12| return-wide v0:v1 145Label_2: 146 .line 62 147 .restart_local v0 148 13| const-wide v2:v3, #+4607632778762754458 (0x3ff199999999999a | 1.10000) 149 18| move-wide v0:v1, v2:v3 150 19| goto/16 Label_1 151Label_3: 152 .line 63 153 21| const-wide v2:v3, #+4612136378390124954 (0x400199999999999a | 2.20000) 154 26| move-wide v0:v1, v2:v3 155 27| goto/16 Label_1 156Label_4: 157 .line 64 158 29| const-wide v2:v3, #+4614613358185178726 (0x400a666666666666 | 3.30000) 159 34| move-wide v0:v1, v2:v3 160 35| goto/16 Label_1 161 37| nop 162Label_5: <aligned> 163 .line 60 164 38| packed-switch-payload 165 1: Label_2 166 2: Label_3 167 3: Label_4 168} 169 170method Target.testInt(int):int 171{ 172 .params "?" 173 .src "exitHooks.java" 174 .line 71 175 .prologue_end 176 .line 71 177 0| move-object v0, v3 178 .local v0, "this", Target 179 1| move v1, v4 180 .local v1, "n", int 181 2| move v2, v1 182 3| sparse-switch v2, Label_5 183 .line 76 184 6| const/16 v2, #+123 (0x0000007b | 1.72360e-43) 185 8| move v0, v2 186Label_1: 187 .end_local v0 188 9| return v0 189Label_2: 190 .line 73 191 .restart_local v0 192 10| const/4 v2, #+1 (0x00000001 | 1.40130e-45) 193 11| move v0, v2 194 12| goto/16 Label_1 195Label_3: 196 .line 74 197 14| const/4 v2, #+2 (0x00000002 | 2.80260e-45) 198 15| move v0, v2 199 16| goto/16 Label_1 200Label_4: 201 .line 75 202 18| const/4 v2, #+3 (0x00000003 | 4.20390e-45) 203 19| move v0, v2 204 20| goto/16 Label_1 205 .line 71 206 22| nop 207 23| nop 208Label_5: <aligned> 209 24| sparse-switch-payload 210 10: Label_2 211 20: Label_3 212 30: Label_4 213} 214 215method Target.testObject(boolean):java.lang.Object 216{ 217 .params "?" 218 .src "exitHooks.java" 219 .line 49 220 .prologue_end 221 .line 49 222 0| move-object v0, v5 223 .local v0, "this", Target 224 1| move v1, v6 225 .local v1, "flag", boolean 226 2| move v2, v1 227 3| if-eqz v2, Label_2 228 .line 51 229 5| sget-object v2, java.lang.System.out 230 7| const-string v3, "Flag!\n" 231 9| const/4 v4, #+0 (0x00000000 | 0.00000) 232 10| new-array v4, v4, java.lang.Object[] 233 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 234 15| move-result-object v2 235 .line 52 236 16| const-string v2, "Sigh" 237 18| move-object v0, v2 238Label_1: 239 .line 55 240 .end_local v0 241 19| return-object v0 242Label_2: 243 .restart_local v0 244 20| const-string v2, "Blah" 245 22| move-object v0, v2 246 23| goto/16 Label_1 247} 248 249method Target.testVoid(boolean):void 250{ 251 .params "?" 252 .src "exitHooks.java" 253 .line 82 254 .prologue_end 255 .line 82 256 0| move-object v0, v5 257 .local v0, "this", Target 258 1| move v1, v6 259 .local v1, "flag", boolean 260 2| move v2, v1 261 3| if-eqz v2, Label_2 262 .line 84 263 5| sget-object v2, java.lang.System.out 264 7| const-string v3, "True!\n" 265 9| const/4 v4, #+0 (0x00000000 | 0.00000) 266 10| new-array v4, v4, java.lang.Object[] 267 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 268 15| move-result-object v2 269Label_1: 270 .line 85 271 .line 90 272 16| return-void 273Label_2: 274 .line 89 275 17| sget-object v2, java.lang.System.out 276 19| const-string v3, "False!\n" 277 21| const/4 v4, #+0 (0x00000000 | 0.00000) 278 22| new-array v4, v4, java.lang.Object[] 279 24| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 280 27| move-result-object v2 281 .line 90 282 28| goto/16 Label_1 283} 284 285method Tracer.<init>():void 286{ 287 .src "exitHooks.java" 288 .line 2 289 .prologue_end 290 .line 2 291 0| move-object v0, v2 292 .local v0, "this", Tracer 293 1| move-object v1, v0 294 2| invoke-direct {v1}, java.lang.Object.<init>():void 295 5| return-void 296} 297 298method Tracer.onExit(double):double 299{ 300 .params "?" 301 .src "exitHooks.java" 302 .line 12 303 .prologue_end 304 .line 12 305 0| move-wide v0:v1, v10:v11 306 .local v0, "value", double 307 1| sget-object v2, java.lang.System.out 308 3| const-string v3, ">>> onExit(double: %f)\n" 309 5| const/4 v4, #+1 (0x00000001 | 1.40130e-45) 310 6| new-array v4, v4, java.lang.Object[] 311 8| move-object v9, v4 312 9| move-object v4, v9 313 10| move-object v5, v9 314 11| const/4 v6, #+0 (0x00000000 | 0.00000) 315 12| move-wide v7:v8, v0:v1 316 13| invoke-static {v7,v8}, java.lang.Double.valueOf(double):java.lang.Double 317 16| move-result-object v7 318 17| aput-object v7, v5, v6 319 19| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 320 22| move-result-object v2 321 .line 13 322 23| move-wide v2:v3, v0:v1 323 24| neg-double v2:v3, v2:v3 324 25| move-wide v0:v1, v2:v3 325 .end_local v0 326 26| return-wide v0:v1 327} 328 329method Tracer.onExit(int):int 330{ 331 .params "?" 332 .src "exitHooks.java" 333 .line 18 334 .prologue_end 335 .line 18 336 0| move v0, v8 337 .local v0, "value", int 338 1| sget-object v1, java.lang.System.out 339 3| const-string v2, ">>> onExit(int: %d)\n" 340 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 341 6| new-array v3, v3, java.lang.Object[] 342 8| move-object v7, v3 343 9| move-object v3, v7 344 10| move-object v4, v7 345 11| const/4 v5, #+0 (0x00000000 | 0.00000) 346 12| move v6, v0 347 13| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer 348 16| move-result-object v6 349 17| aput-object v6, v4, v5 350 19| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 351 22| move-result-object v1 352 .line 19 353 23| move v1, v0 354 24| const/16 v2, #+10 (0x0000000a | 1.40130e-44) 355 26| mul-int/lit8 v1, v1, #+10 (0x0000000a | 1.40130e-44) 356 28| move v0, v1 357 .end_local v0 358 29| return v0 359} 360 361method Tracer.onExit(java.lang.Object):java.lang.Object 362{ 363 .params "?" 364 .src "exitHooks.java" 365 .line 6 366 .prologue_end 367 .line 6 368 0| move-object v0, v8 369 .local v0, "value", java.lang.Object 370 1| sget-object v1, java.lang.System.out 371 3| const-string v2, ">>> onExit(Object: %s)\n" 372 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 373 6| new-array v3, v3, java.lang.Object[] 374 8| move-object v7, v3 375 9| move-object v3, v7 376 10| move-object v4, v7 377 11| const/4 v5, #+0 (0x00000000 | 0.00000) 378 12| move-object v6, v0 379 13| aput-object v6, v4, v5 380 15| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 381 18| move-result-object v1 382 .line 7 383 19| move-object v1, v0 384 20| move-object v0, v1 385 .end_local v0 386 21| return-object v0 387} 388 389method Tracer.onExit():void 390{ 391 .src "exitHooks.java" 392 .line 24 393 .prologue_end 394 .line 24 395 0| sget-object v0, java.lang.System.out 396 2| const-string v1, ">>> onExit(void)\n" 397 4| const/4 v2, #+0 (0x00000000 | 0.00000) 398 5| new-array v2, v2, java.lang.Object[] 399 7| invoke-virtual {v0,v1,v2}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 400 10| move-result-object v0 401 .line 25 402 11| return-void 403} 404