我已经使用jad多年了,其中大多数都与Jadclipse插件配合使用,这使其非常有用。特别是使用“对齐代码进行调试”,它使您可以查看堆栈跟踪中任何行的反编译代码。非常好。

不幸的是,我越来越多地看到注释潜入,这很可能是因为jad期望classfile的顺序正确,而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一起使用效果很好,那就更好了。

最佳答案

调试格式的问题来自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为什么如此行事。根据jad帮助,无法控制顺序。

我在jadclipse中注意到,如果您设置,则JadClipse-> Formatting->不要在打开大括号之前插入换行符-由于它的工作原理,它会减少/* <-MISALIGNED-> */段数。

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

10-05 17:59