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