什么是比Eclipse更准确的反编译器来摆脱< -MISALIGNED - >?

时间:2010-09-10 12:20:15

标签: java decompiler jad jadclipse

我已经使用了jad多年,其中大部分使用Jadclipse插件进行eclipse,这使得它非常实用。特别是使用“调试对齐代码”,它允许您查看堆栈跟踪中任何行的反编译代码。很好。

不幸的是,我越来越多地看到< - MISALIGNED - >注释偷偷摸摸,这很可能是因为jad期望类文件按顺序排列,而Java 6运行时库的情况并非如此。因此,当写入文件,并且一条指令说“这是第100行”时,则会写入99个空行,如果那时下一条指令显示“这是第10行”,那么jad无法回放以将该输出放在那里,而只是打印发表评论说这是错误的地方。

以下是HttpURLConnection的示例:

          protected HttpURLConnection(URL url, Proxy proxy, Handler handler1)
            {
/* <-MISALIGNED-> */ /* 603*/        super(url);
/* <-MISALIGNED-> */ /* 192*/        ps = null;
/* <-MISALIGNED-> */ /* 196*/        errorStream = null;
/* <-MISALIGNED-> */ /* 199*/        setUserCookies = true;
/* <-MISALIGNED-> */ /* 200*/        userCookies = null;
/* <-MISALIGNED-> */ /* 220*/        currentProxyCredentials = null;
/* <-MISALIGNED-> */ /* 221*/        currentServerCredentials = null;
/* <-MISALIGNED-> */ /* 222*/        needToCheck = true;
/* <-MISALIGNED-> */ /* 223*/        doingNTLM2ndStage = false;
/* <-MISALIGNED-> */ /* 224*/        doingNTLMp2ndStage = false;
/* <-MISALIGNED-> */ /* 226*/        tryTransparentNTLMServer = NTLMAuthentication.supportsTransparentAuth();
/* <-MISALIGNED-> */ /* 227*/        tryTransparentNTLMProxy = NTLMAuthentication.supportsTransparentAuth();
/

现在的问题是,是否有另一个反编译器可以生成更准确的输出行。实际的反编译不需要非常好或任何东西,但我真的希望它是Java Stack Trace视图所期望的。如果它适用于Jadclipse,那就更好了。

3 个答案:

答案 0 :(得分:2)

调试格式的问题来自jadclipse,而不是来自jadjad没有这种能力。

jadclipse插件在类名DebugAlignWriter中有一个小代码段,可以执行此操作:

if((align = getAlignTarget(aLine)) != -1)
{
   if(align < curLine)
   {
      if(curLine != 0)
      {
          out.write(10);
      }
      out.write("/* <-MISALIGNED-> */ ");
      out.write(aLine);
      curLine++;
   }
   else if(align == curLine)
   {
      out.write(aLine);
   }
   else
   {
      for(; align > curLine; curLine++)
      {
          out.write(10);
      }
      out.write(aLine);
   }

}

基本上它会尝试对齐jad的输出。

因此,根本原因是jad产生的输出不一定是读取顺序。不幸的是,我无法阐明为什么jad以这种方式行事。根据{{​​1}}帮助,无法控制订单。

我在jad注意到,如果你设置 JadClipse-&gt;格式化 - &gt;不要在打开大括号之前插入新行 - 它会减少由于其工作方式的性质,jadclipse段的数量。

另外,如果您选中方法之前的输出字段选项,则可以增加/* <-MISALIGNED-> */段的数量,因此请避免使用。

答案 1 :(得分:1)

JD-Eclipse是一个非常好的反编译器,它也处理java 7的功能。

它没有“调试对齐代码”功能,但我自己添加了一个。去年我一直在使用它。

我还处理线路必须移回的情况;我仍然将其标记为MISALIGNED以表示特殊情况,但至少它位于右侧。

如果有人想尝试一下,可以从here下载。 README.txt内的更多细节

答案 2 :(得分:0)

我使用尽可能少的格式化jad然后使用eclipse的格式命令,因为我可以使它与首选项中的首选样式匹配。