【发布时间】:2010-09-10 12:20:15
【问题描述】:
我使用 jad 已经很多年了,其中大部分都带有 Jadclipse 插件,这使得它非常有用。尤其是“对齐代码以进行调试”,它允许您查看堆栈跟踪中任何行的反编译代码。很不错。
不幸的是,我越来越多地看到 注释潜入其中,这很可能是因为 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 配合得很好,那就更好了。
【问题讨论】:
-
我不是反编译器或字节码专家,但我很确定很难有一个可以反编译以匹配行号的反编译器。我使用Java Decompiler(名称中有什么),它只是将行号放在实际行之前的cmets中。通常没有什么是一致的,但我只是用它来查找一些东西,而不是进行任何实际的调试——不是我的代码,也可能是封闭源代码,不是我的工作。
标签: java decompiler jad jadclipse