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 Label_1 151Label_3: 152 .line 63 153 20| const-wide v2:v3, #+4612136378390124954 (0x400199999999999a | 2.20000) 154 25| move-wide v0:v1, v2:v3 155 26| goto Label_1 156Label_4: 157 .line 64 158 27| const-wide v2:v3, #+4614613358185178726 (0x400a666666666666 | 3.30000) 159 32| move-wide v0:v1, v2:v3 160 33| goto Label_1 161Label_5: <aligned> 162 .line 60 163 34| packed-switch-payload 164 1: Label_2 165 2: Label_3 166 3: Label_4 167} 168 169method Target.testInt(int):int 170{ 171 .params "?" 172 .src "exitHooks.java" 173 .line 71 174 .prologue_end 175 .line 71 176 0| move-object v0, v3 177 .local v0, "this", Target 178 1| move v1, v4 179 .local v1, "n", int 180 2| move v2, v1 181 3| sparse-switch v2, Label_5 182 .line 76 183 6| const/16 v2, #+123 (0x0000007b | 1.72360e-43) 184 8| move v0, v2 185Label_1: 186 .end_local v0 187 9| return v0 188Label_2: 189 .line 73 190 .restart_local v0 191 10| const/4 v2, #+1 (0x00000001 | 1.40130e-45) 192 11| move v0, v2 193 12| goto Label_1 194Label_3: 195 .line 74 196 13| const/4 v2, #+2 (0x00000002 | 2.80260e-45) 197 14| move v0, v2 198 15| goto Label_1 199Label_4: 200 .line 75 201 16| const/4 v2, #+3 (0x00000003 | 4.20390e-45) 202 17| move v0, v2 203 18| goto Label_1 204 .line 71 205 19| nop 206Label_5: <aligned> 207 20| sparse-switch-payload 208 10: Label_2 209 20: Label_3 210 30: Label_4 211} 212 213method Target.testObject(boolean):java.lang.Object 214{ 215 .params "?" 216 .src "exitHooks.java" 217 .line 49 218 .prologue_end 219 .line 49 220 0| move-object v0, v5 221 .local v0, "this", Target 222 1| move v1, v6 223 .local v1, "flag", boolean 224 2| move v2, v1 225 3| if-eqz v2, Label_2 226 .line 51 227 5| sget-object v2, java.lang.System.out 228 7| const-string v3, "Flag!\n" 229 9| const/4 v4, #+0 (0x00000000 | 0.00000) 230 10| new-array v4, v4, java.lang.Object[] 231 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 232 15| move-result-object v2 233 .line 52 234 16| const-string v2, "Sigh" 235 18| move-object v0, v2 236Label_1: 237 .line 55 238 .end_local v0 239 19| return-object v0 240Label_2: 241 .restart_local v0 242 20| const-string v2, "Blah" 243 22| move-object v0, v2 244 23| goto Label_1 245} 246 247method Target.testVoid(boolean):void 248{ 249 .params "?" 250 .src "exitHooks.java" 251 .line 82 252 .prologue_end 253 .line 82 254 0| move-object v0, v5 255 .local v0, "this", Target 256 1| move v1, v6 257 .local v1, "flag", boolean 258 2| move v2, v1 259 3| if-eqz v2, Label_2 260 .line 84 261 5| sget-object v2, java.lang.System.out 262 7| const-string v3, "True!\n" 263 9| const/4 v4, #+0 (0x00000000 | 0.00000) 264 10| new-array v4, v4, java.lang.Object[] 265 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 266 15| move-result-object v2 267Label_1: 268 .line 85 269 .line 90 270 16| return-void 271Label_2: 272 .line 89 273 17| sget-object v2, java.lang.System.out 274 19| const-string v3, "False!\n" 275 21| const/4 v4, #+0 (0x00000000 | 0.00000) 276 22| new-array v4, v4, java.lang.Object[] 277 24| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 278 27| move-result-object v2 279 .line 90 280 28| goto Label_1 281} 282 283method Tracer.<init>():void 284{ 285 .src "exitHooks.java" 286 .line 2 287 .prologue_end 288 .line 2 289 0| move-object v0, v2 290 .local v0, "this", Tracer 291 1| move-object v1, v0 292 2| invoke-direct {v1}, java.lang.Object.<init>():void 293 5| return-void 294} 295 296method Tracer.onExit(double):double 297{ 298 .params "?" 299 .src "exitHooks.java" 300 .line 12 301 .prologue_end 302 .line 12 303 0| move-wide v0:v1, v10:v11 304 .local v0, "value", double 305 1| sget-object v2, java.lang.System.out 306 3| const-string v3, ">>> onExit(double: %f)\n" 307 5| const/4 v4, #+1 (0x00000001 | 1.40130e-45) 308 6| new-array v4, v4, java.lang.Object[] 309 8| move-object v9, v4 310 9| move-object v4, v9 311 10| move-object v5, v9 312 11| const/4 v6, #+0 (0x00000000 | 0.00000) 313 12| move-wide v7:v8, v0:v1 314 13| invoke-static {v7,v8}, java.lang.Double.valueOf(double):java.lang.Double 315 16| move-result-object v7 316 17| aput-object v7, v5, v6 317 19| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 318 22| move-result-object v2 319 .line 13 320 23| move-wide v2:v3, v0:v1 321 24| neg-double v2:v3, v2:v3 322 25| move-wide v0:v1, v2:v3 323 .end_local v0 324 26| return-wide v0:v1 325} 326 327method Tracer.onExit(int):int 328{ 329 .params "?" 330 .src "exitHooks.java" 331 .line 18 332 .prologue_end 333 .line 18 334 0| move v0, v8 335 .local v0, "value", int 336 1| sget-object v1, java.lang.System.out 337 3| const-string v2, ">>> onExit(int: %d)\n" 338 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 339 6| new-array v3, v3, java.lang.Object[] 340 8| move-object v7, v3 341 9| move-object v3, v7 342 10| move-object v4, v7 343 11| const/4 v5, #+0 (0x00000000 | 0.00000) 344 12| move v6, v0 345 13| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer 346 16| move-result-object v6 347 17| aput-object v6, v4, v5 348 19| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 349 22| move-result-object v1 350 .line 19 351 23| move v1, v0 352 24| const/16 v2, #+10 (0x0000000a | 1.40130e-44) 353 26| mul-int/lit8 v1, v1, #+10 (0x0000000a | 1.40130e-44) 354 28| move v0, v1 355 .end_local v0 356 29| return v0 357} 358 359method Tracer.onExit(java.lang.Object):java.lang.Object 360{ 361 .params "?" 362 .src "exitHooks.java" 363 .line 6 364 .prologue_end 365 .line 6 366 0| move-object v0, v8 367 .local v0, "value", java.lang.Object 368 1| sget-object v1, java.lang.System.out 369 3| const-string v2, ">>> onExit(Object: %s)\n" 370 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 371 6| new-array v3, v3, java.lang.Object[] 372 8| move-object v7, v3 373 9| move-object v3, v7 374 10| move-object v4, v7 375 11| const/4 v5, #+0 (0x00000000 | 0.00000) 376 12| move-object v6, v0 377 13| aput-object v6, v4, v5 378 15| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 379 18| move-result-object v1 380 .line 7 381 19| move-object v1, v0 382 20| move-object v0, v1 383 .end_local v0 384 21| return-object v0 385} 386 387method Tracer.onExit():void 388{ 389 .src "exitHooks.java" 390 .line 24 391 .prologue_end 392 .line 24 393 0| sget-object v0, java.lang.System.out 394 2| const-string v1, ">>> onExit(void)\n" 395 4| const/4 v2, #+0 (0x00000000 | 0.00000) 396 5| new-array v2, v2, java.lang.Object[] 397 7| invoke-virtual {v0,v1,v2}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 398 10| move-result-object v0 399 .line 25 400 11| return-void 401} 402