使用jad以及JD-GUI反编译cglib产生的class文件时,发现这两种工具都不能很好的反编译fastclass文件,总会出现一部分汇编代码:
/* Error */
public int getIndex(net.sf.cglib.core.Signature arg1)
{
// Byte code:
// 0: aload_1
// 1: invokevirtual 17 java/lang/Object:toString ()Ljava/lang/String;
// 4: dup
// 5: invokevirtual 21 java/lang/Object:hashCode ()I
// 8: lookupswitch default:+102->110, -1949253108:+52->60, 837540553:+62->70, 1826985398:+72->80, 1913648695:+82->90, 1984935277:+92->100
// 60: ldc 23
// 62: invokevirtual 27 java/lang/Object:equals (Ljava/lang/Object;)Z
// 65: ifeq +46 -> 111
// 68: iconst_1
// 69: ireturn
// 70: ldc 29
// 72: invokevirtual 27 java/lang/Object:equals (Ljava/lang/Object;)Z
// 75: ifeq +36 -> 111
// 78: iconst_0
// 79: ireturn
// 80: ldc 31
// 82: invokevirtual 27 java/lang/Object:equals (Ljava/lang/Object;)Z
// 85: ifeq +26 -> 111
// 88: iconst_2
// 89: ireturn
// 90: ldc 33
// 92: invokevirtual 27 java/lang/Object:equals (Ljava/lang/Object;)Z
// 95: ifeq +16 -> 111
// 98: iconst_3
// 99: ireturn
// 100: ldc 35
// 102: invokevirtual 27 java/lang/Object:equals (Ljava/lang/Object;)Z
// 105: ifeq +6 -> 111
// 108: iconst_4
// 109: ireturn
// 110: pop
// 111: iconst_m1
// 112: ireturn
}
最终在eclipse上安装了Enhanced Class Decompiler这个插件可以很好的解决这个问题:
public int getIndex(Signature var1) {
String var10000 = var1.toString();
switch (var10000.hashCode()) {
case -1949253108 :
if (var10000.equals("update()V")) {
return 1;
}
break;
case 837540553 :
if (var10000.equals("add(Ljava/lang/String;I)Z")) {
return 0;
}
break;
case 1826985398 :
if (var10000.equals("equals(Ljava/lang/Object;)Z")) {
return 2;
}
break;
case 1913648695 :
if (var10000.equals("toString()Ljava/lang/String;")) {
return 3;
}
break;
case 1984935277 :
if (var10000.equals("hashCode()I")) {
return 4;
}
}
return -1;
}