java - 有什么比 jad 更准确​​的反编译器可以让 Eclipse 摆脱 <-MISALIGNED ->?

标签 java decompiler jad jadclipse

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

不幸的是,我看到越来越多的 <- 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 View 期望的位置。如果它与 Jadclipse 配合良好,那就更好了。

最佳答案

调试格式化的问题来自jadclipse而不是来自 jad . jad没有那个能力。

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 help 无法控制顺序。

我注意到 jadclipse如果您设置 JadClipse->Formatting->Don't insert a newline before opening brace - 它会减少 /* <-MISALIGNED-> */ 的数量由于其工作方式的性质。

此外,如果您选中了方法前的输出字段 选项,它可以增加/* <-MISALIGNED-> */ 的数量。段,所以要避免它。

关于java - 有什么比 jad 更准确​​的反编译器可以让 Eclipse 摆脱 <-MISALIGNED ->?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684539/

相关文章:

java - .jar文件在反编译时有编译错误但运行正常

java - Java 类文件知道空格吗?

java - Web 应用程序配置不将 .jad 文件视为 .jad 文件

java - 在 do while 循环中检查条件的有效方法?

SSJS xpages 中的 java 结构体数组

java - 如何让Java在System.exit(0)时释放所有内存?

java - 反编译java类文件

java - FPS 在全屏模式下下降,但在窗口/Applet 下正常?

eclipse - 配置 eclipse 使用 jad

java - JADClipse 不适用于 Eclipse 3.6