16
16
*/
17
17
package com .googlecode .d2j .smali ;
18
18
19
- import com .googlecode .d2j .DexLabel ;
20
- import com .googlecode .d2j .Field ;
21
- import com .googlecode .d2j .Method ;
19
+ import com .googlecode .d2j .*;
22
20
import com .googlecode .d2j .node .DexDebugNode ;
23
21
import com .googlecode .d2j .reader .InstructionFormat ;
24
22
import com .googlecode .d2j .reader .Op ;
@@ -237,11 +235,9 @@ public void visitEnd() {
237
235
@ Override
238
236
public void visitFieldStmt (Op op , int a , int b , Field field ) {
239
237
if (op .format == InstructionFormat .kFmt22c ) {// iget,iput
240
- out .s ("%s %s, %s, %s->%s:%s" , op .displayName , reg (a ), reg (b ), BaksmaliDumper .escapeType (field .getOwner ()),
241
- BaksmaliDumper .escapeId (field .getName ()), BaksmaliDumper .escapeType (field .getType ()));
238
+ out .s ("%s %s, %s, %s" , op .displayName , reg (a ), reg (b ), BaksmaliDumper .escapeField (field ));
242
239
} else {
243
- out .s ("%s %s, %s->%s:%s" , op .displayName , reg (a ), BaksmaliDumper .escapeType (field .getOwner ()),
244
- BaksmaliDumper .escapeId (field .getName ()), BaksmaliDumper .escapeType (field .getType ()));
240
+ out .s ("%s %s, %s" , op .displayName , reg (a ), BaksmaliDumper .escapeField (field ));
245
241
}
246
242
}
247
243
@@ -341,9 +337,8 @@ public void visitMethodStmt(Op op, int[] args, Method method) {
341
337
342
338
if (args .length > 0 ) {
343
339
if (op .format == InstructionFormat .kFmt3rc ) { // invoke-x/range
344
- out .s ("%s { %s .. %s }, %s->%s%s" , op .displayName , reg (args [0 ]), reg (args [args .length - 1 ]),
345
- BaksmaliDumper .escapeType (method .getOwner ()), BaksmaliDumper .escapeId (method .getName ()),
346
- BaksmaliDumper .escapeMethodDesc (method ));
340
+ out .s ("%s { %s .. %s }, %s" , op .displayName , reg (args [0 ]), reg (args [args .length - 1 ]),
341
+ BaksmaliDumper .escapeMethod (method ));
347
342
} else {
348
343
boolean first = true ;
349
344
StringBuilder buff = new StringBuilder ();
@@ -355,16 +350,72 @@ public void visitMethodStmt(Op op, int[] args, Method method) {
355
350
}
356
351
buff .append (reg (i ));
357
352
}
358
- out .s ("%s { %s }, %s->%s%s" , op .displayName , buff , BaksmaliDumper .escapeType (method .getOwner ()),
359
- BaksmaliDumper .escapeId (method .getName ()), BaksmaliDumper .escapeMethodDesc (method ));
353
+ out .s ("%s { %s }, %s" , op .displayName , buff , BaksmaliDumper .escapeMethod (method ));
360
354
}
361
355
} else {
362
- out .s ("%s { }, %s->%s%s" , op .displayName , BaksmaliDumper .escapeType (method .getOwner ()),
363
- BaksmaliDumper .escapeId (method .getName ()), BaksmaliDumper .escapeMethodDesc (method ));
356
+ out .s ("%s { }, %s" , op .displayName , BaksmaliDumper .escapeMethod (method ));
364
357
}
365
358
366
359
}
367
360
361
+ @ Override
362
+ public void visitMethodStmt (Op op , int [] args , Method method , Proto proto ) {
363
+ if (args .length > 0 ) {
364
+ if (op .format == InstructionFormat .kFmt4rcc ) { // invoke-x/range
365
+ out .s ("%s { %s .. %s }, %s, %s" , op .displayName , reg (args [0 ]), reg (args [args .length - 1 ]),
366
+ BaksmaliDumper .escapeMethod (method ), BaksmaliDumper .escapeMethodDesc (proto ));
367
+ } else {
368
+ boolean first = true ;
369
+ StringBuilder buff = new StringBuilder ();
370
+ for (int i : args ) {
371
+ if (first ) {
372
+ first = false ;
373
+ } else {
374
+ buff .append (", " );
375
+ }
376
+ buff .append (reg (i ));
377
+ }
378
+ out .s ("%s { %s }, %s, %s" , op .displayName , buff , BaksmaliDumper .escapeMethod (method ),
379
+ BaksmaliDumper .escapeMethodDesc (proto ));
380
+ }
381
+ } else {
382
+ out .s ("%s { }, %s, %s" , op .displayName , BaksmaliDumper .escapeMethod (method ),
383
+ BaksmaliDumper .escapeMethodDesc (proto ));
384
+ }
385
+ }
386
+
387
+ @ Override
388
+ public void visitMethodStmt (Op op , int [] args , String name , Proto proto , MethodHandle bsm , Object ... bsmArgs ) {
389
+ StringBuilder sb = new StringBuilder ();
390
+ sb .append ("{ " ).append ( BaksmaliDumper .escapeValue (bsm )).append (", " ).append (BaksmaliDumper .escapeValue (name )).append (", " ).append (BaksmaliDumper .escapeMethodDesc (proto ));
391
+ for (Object o : bsmArgs ) {
392
+ sb .append (", " ).append (BaksmaliDumper .escapeValue (o ));
393
+ }
394
+ sb .append ("}" );
395
+
396
+
397
+ if (args .length > 0 ) {
398
+ if (op .format == InstructionFormat .kFmt3rc ) { // invoke-x/range
399
+ out .s ("%s { %s .. %s }, %s" , op .displayName , reg (args [0 ]), reg (args [args .length - 1 ]),
400
+ sb );
401
+ } else {
402
+ boolean first = true ;
403
+ StringBuilder buff = new StringBuilder ();
404
+ for (int i : args ) {
405
+ if (first ) {
406
+ first = false ;
407
+ } else {
408
+ buff .append (", " );
409
+ }
410
+ buff .append (reg (i ));
411
+ }
412
+ out .s ("%s { %s }, %s" , op .displayName , buff , sb );
413
+ }
414
+ } else {
415
+ out .s ("%s { }, %s" , op .displayName , sb );
416
+ }
417
+ }
418
+
368
419
@ Override
369
420
public void visitPackedSwitchStmt (Op op , int ra , int first_case , DexLabel [] labels ) {
370
421
DexLabel dx = new DexLabel ();
0 commit comments