我已經使用了許多年的jad,其中大部分都使用Jadclipse插件進行日食,這使得它非常實用。特別是使用「調試代碼對齊」,可以讓您查看堆棧跟蹤中任何行的反編譯代碼。非常好。什麼是一個更準確的反編譯器比jad的Eclipse來擺脫<-MISALIGNED->?
不幸的是,我越來越多地看到< - MISALIGNED - >註釋,這很可能是因爲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,那更好。
我不是一個反編譯器或字節碼專家,但我敢肯定,有一個反編譯器可以反編譯來匹配行號是非常困難的。我使用Java Decompiler(名稱中包含的內容),它只是在實際行之前將行號放在註釋中。通常情況下,沒有任何對齊方式,但我只是用它來查看一些東西,而不是做任何實際的調試 - 不是我的代碼,也可能是封閉源代碼,而不是我的工作。 – fwielstra 2010-09-10 13:58:32