jad Couldn't fully decompile method getIndex

2022-03-29 14:35:35 浏览数 (1)

使用jad以及JD-GUI反编译cglib产生的class文件时,发现这两种工具都不能很好的反编译fastclass文件,总会出现一部分汇编代码:

代码语言:javascript复制
  /* 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这个插件可以很好的解决这个问题:

代码语言:javascript复制
    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;
     }

0 人点赞