2010-01-10 121 views
8

的Java(JD/JAD)源(相關問題:Java compilers or JVM languages that support goto?重新編譯反編譯包含GOTO指令

我已經反編譯一個jar(在法律上,用於調試),並希望重新編譯。

我用兩個JADJD兩者不編譯由於GOTO指令

例如

 goto _L1 

     ... 
     L1: 
     return true; 

是否有簡單的方法(或任何方式)重新編譯它? (除非手動重構和刪除goto的)


+0

很可能實現'使用異常goto',但它不會是漂亮。其他一些祕籍收集在這裏:http://stackoverflow.com/questions/2430782/alternative-to-goto-statement-in-java – BRFennPocock 2011-12-12 21:40:30

+0

你如何只是用'return true;'代替'goto L1'? :) – fredoverflow 2014-11-25 07:41:37

回答

10

否,不存在。在你的情況下,JD和JAD都不能正確地反編譯類文件。 'goto'語句是關於實際程序流程的暗示。

您可以直接聯繫Java Decompiler團隊,發送反編譯結果爲非法源代碼的類文件,並詢問它是當前版本中的錯誤還是尚未實現的功能。

3

所有反編譯器都會查找與Java源構造對應的代碼模式,並選擇最適合的源代碼。

顯然,您擁有的代碼不符合存儲在JAD或JD中的任何模式,因此您將獲得不可編譯的Java源代碼。這很可能是因爲JAD幾年來一直沒有積極開發。

我建議你看看Soot項目有一個更積極的反編譯。

http://www.sable.mcgill.ca/soot/

8

JAD是一個非常了不起的反編譯器,JD ......有一些問題 「的try-catch-終於」 語句。

您是否嘗試過Stiver反編譯器(http://www.reversed-java.com/fernflower)? JD的作者Emmanuel。

+2

剛試過Emmanuel的JD,就像一個魅力。 – 2010-11-21 07:03:25

0

我會推薦一個現代反編譯器 - 比如CFR或者FernFlower! Jadx,快速和Android支持,CFR(支持Java 8),JDCore(非常快),Procyon,Fernflower和JAD(非常快但過時)。

人們可以使用,而不必安裝位置:http://www.javadecompilers.com/