我使用 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 视图所期望的位置。如果它与 Jadclipse 配合得很好,那就更好了。
I have used jad for many years, most of these with the Jadclipse plugin to eclipse which makes it quite usable. Especially with the "Align code for debugging" which allows you to see the decompiled code for any line in a stack trace. Very nice.
Unfortunately I've seen more and more that the <- MISALIGNED -> comment sneaks in, which is most likely because jad expects the classfile to be in order which clearly is not the case for the Java 6 runtime library. Hence when writing the file, and an instruction says "this is line 100" then 99 empty lines are written, and if then the next instruction says "this is for line 10" then jad cannot rewind to put that output there, but just prints out a comment that this is in the wrong place.
Here is an example for 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();
/
The question is now if there is another decompiler which generates more accurate output linewise. The actual decompilation does not need to be extremely great or anything, but I really like it to be where the Java Stack Trace view expects it to be. If it works well with Jadclipse, thats even better.
发布评论
评论(3)
调试格式的问题来自
jadclipse
而不是jad
。jad
不具备该功能。jadclipse
插件在类名DebugAlignWriter
中有一个小代码部分,它执行以下操作:}
基本上它会尝试对齐
jad
的输出。所以根本原因是
jad
产生的输出不一定按照读取顺序。不幸的是,我无法解释为什么jad
会这样做。根据 jad 帮助,无法控制顺序。我在
jadclipse
中注意到,如果您设置 JadClipse->Formatting->Don't insert a newline before opening brax - 它会减少/* <-MISALIGNED-> 的数量*/
由于其工作方式的性质而分段。此外,如果您选中了方法之前的输出字段选项,它可能会增加
/* <-MISALIGNED-> 的数量。 */
段,所以避免它。The problem with formatting for debug comes from
jadclipse
and not fromjad
.jad
does not have that capability.The
jadclipse
plug-in has a little code section in a class namesDebugAlignWriter
which does this:}
Basically it tries to align the output from
jad
.So the root cause is that
jad
produces an output that is not necessarily in reading order. Unfortunately I cannot shed light on whyjad
acts that way. According tojad
help there is no way of controlling the order.I noticed in
jadclipse
that if you set JadClipse->Formatting->Don't insert a newline before opening brace - it will reduce the number of/* <-MISALIGNED-> */
segments due to the nature of how it works.Also, if you checked the Output fields before methods option it can increase the number of
/* <-MISALIGNED-> */
segments, so avoid it.JD-Eclipse 是一个非常好的反编译器,它还可以处理 java 7 功能。
它还没有“对齐代码以进行调试”功能,但我自己添加了一个。我去年一直在使用它。
当线路需要向后移动时,我也会处理这些情况;我仍然将其标记为 MISALIGNED 以表示特殊情况,但至少它放置在正确的行上。
如果有人想尝试一下,可以从此处。 README.txt 中有更多详细信息
JD-Eclipse is a very good decompiler which also handles java 7 features.
It doesn't have an "Align code for debugging" feature yet but I added one myself. I've been using it for the last year.
I also handle the cases when the line has to be moved back; I still mark it as MISALIGNED to signal the special case but at least it's placed on the right line.
If anyone wants to give it a try it can be download from here. More details inside README.txt
我使用 jad 并尽可能少地格式化,然后使用 eclipse 的 format 命令,因为我可以根据首选项使其符合我喜欢的样式。
I use jad with as little formatting as possible and then I use eclipse's format command, as I can make it match my preferred style from the preferences.