您的位置:首页 > 移动开发 > Android开发

反编译教程-03(jad 常见问题)解决error

2013-05-10 18:17 579 查看
我安装了JadClipse插件来反编译.class文件,有些.class可以完全反编译出来,但有些.class只能反编译一部分并报出这样的错误:
/*
DECOMPILATION REPORT

Decompiled from: C:\Documents and Settings\Administrator\桌面\js控制\barcode.jar
Total time: 328 ms
Jad reported messages/errors:
Couldn't fully decompile method opas
Couldn't fully decompile method pasd
Couldn't fully decompile method sdfg
Couldn't fully decompile method dfgh
Couldn't fully decompile method fghj
Couldn't fully decompile method ghjk
Couldn't fully decompile method zxcv
Couldn't fully decompile method nmqw
Exit status: 0
Caught exceptions:
*/

这是什么原因呢,请高手指教

附myeclipse插件反编译的配置:

准备工作

下载jad.exe文件:http://www.varaneckas.com/sites/default/files/jad/jad158g.win.zip

下载jadeclipse插件:http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.jar?download 
JadClipse 官网:http://jadclipse.sourceforge.net/wiki/index.php/Main_Page 
安装

将jad.exe解压到指定目录。如:C:\jdk1.5.0_12\bin\jad.exe(全路径)
将jadeclipse插件net.sf.jadclipse_3.3.0.jar 拷贝到myeclipse安装目录\Genuitec\Common\plugins\目录下。 
在myeclipse安装目录下dropins/创建eclipse文件夹,然后在eclipse文件夹中分别创建features、plugins文件夹,将net.sf.jadclipse_3.3.0.jar 分别拷贝到features和plugins文件夹中。 
重新启动myeclipse后,配置jadeclipse插件 
在eclipse窗口下,点击Window > Preferences > Java > JadClipse > Path to Decompiler。(设置jad的绝对路径,如 C:\java\Jad\jad.exe)。Use Eclipse code formatter(overrides Jad formatting instructions)选项打勾,与格式化出来的代码样式一致。 
在eclipse窗口下,点击Window > Preferences > Java > JadClipse > Misc,将Convert Unicode strings into ANSI strings选项打勾,避免反编译后可能出现的中文乱码。 

Java反编译工具开始是使用小颖,后来使用DJ Java Decompiler(破解版,嘿嘿),后来不能用了,用google一搜,发现大家都开始使用jad+jadclipse了,用了一段时间了,发现真是好用啊。看来要经常跳上井沿
102e2
goole以下阿,了解一下新动态。

    看jad网站说jad的bug和限制:
    1.包含有内部类,则jad处理构造函数的参数时会出错;
    2.不支持zip和jar包。(注:如果使用Eclipse插件,则很容易得到包中的某个类的反编译代码)
    3.当有标签块,嵌套循环中有break/continue,有goto语句的时候,会提示信息“Couldn't fully decompile method <name>”;当有try-catch-finally语句的时候会提示信息“Couldn't resolve all exception handlers in method <name>”
    4. Currently Jad ignores the contents of the Line Number Table Attribute and the Source File Attribute(不明白什么意思)
    5.JAD不能处理继承信息,总是把java.lang.Object作为两个不同类的通用父类,需要的时候做强制转换
    6.jad对inlined functions处理不好

    jad使用过程中发现

         SharkUtilities.releaseTransaction(t);
          break  MISSING_BLOCK_LABEL_89;
         Exception exception;
         exception;
         SharkUtilities.releaseTransaction(t);
          throw  exception; 
这个一般是try-catch-finally语句中的

  finally ... {
    SharkUtilities.releaseTransaction(t);
 } 
语句。
    类似于

         Exception ex;
          if ( ! connected)
              throw   new  NotConnected( " The connection is not established... " );
         SecurityManager sm  =  SharkEngineManager.getInstance().getSecurityManager();
          if (sm  !=   null )
              try 
               ... {
                 sm.check_executionadministration_get_sequence_processmgr(t, userId);
             } 
              //  Misplaced declaration of an exception variable 
              catch (Exception ex)
               ... {
                  throw   new  BaseException(ex);
             } 
          return  SharkEngineManager.getInstance().getObjectFactory().createProcessMgrIteratorWrapper(t, userId).get_next_n_sequence(t, max_number);
         ex;
         cus.info( " ExecutionAdmin -> Unexpected error while user tries to get the list of process managers " );
          throw   new  BaseException(ex); 
应该是

      try ... {
          if ( ! connected)
              throw   new  NotConnected( " The connection is not established... " );
         SecurityManager sm  =  SharkEngineManager.getInstance().getSecurityManager();
          if (sm  !=   null )
              try 
               ... {
                 sm.check_executionadministration_get_sequence_processmgr(t, userId);
             } 
              //  Misplaced declaration of an exception variable 
              catch (Exception ex)
               ... {
                  throw   new  BaseException(ex);
             } 
          return  SharkEngineManager.getInstance().getObjectFactory().createProcessMgrIteratorWrapper(t, userId).get_next_n_sequence(t, max_number);
          } catch (Exception ex) ... {
         cus.info( " ExecutionAdmin -> Unexpected error while user tries to get the list of process managers " );
          throw   new  BaseException(ex);
        } 
嵌套try-catch
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息