2012-06-18 54 views
0

我有一個Java類,充滿了錯誤,甚至不會在我的電腦上編譯(我不知道這個人是如何編譯的),但它以某種方式工作。我不能用我慣用的工具重新編譯它,所以我正在尋找可以編譯但可能忽略錯誤的東西,或者我認爲很酷的東西可以在反編譯和顯示文件源的程序中打開它,允許我編輯它,然後自動重新編譯它。有點像JD-GUI,但你可以編輯這些文件。Easy Java .class文件編輯器?

+7

這沒有任何意義。如果編譯器給你錯誤消息,那麼該文件就不能被編譯。你得到什麼樣的錯誤信息? –

+3

那裏有Java反編譯器,但是如果你可以直接訪問源代碼,你爲什麼要使用這些呢? – Makoto

+0

我可以訪問源代碼,但它沒有被混淆。導出的類是混淆的,所以我需要編輯它(我知道該編輯什麼)。我不知道如何以正確的方式重新混淆代碼。 – Greg

回答

5

我不認爲這樣的工具存在Java。或者至少,不是以有效解決您的問題的形式。

更高效的方法是找出導致這些編譯錯誤的原因並加以解決。如果您收到一堆錯誤的文件應該編譯(例如,因爲它編譯爲別人),有機會,它是下列之一:

  • 你構建類路徑是不正確的,編譯器無法找到外部依賴關係。
  • 您缺少一些包含外部依賴關係的JAR文件。
  • 你有一些JAR文件的版本錯誤。
  • 您使用的是錯誤版本的Java SDK。

這些都很容易解決...一旦你知道問題是什麼。

如果您向我們提供了編譯錯誤的示例,我們可以確認這一點......或提供更好的診斷。


當前一代反編譯器都沒有在產生編譯源代碼非常好。此外,這種方法不會解決上面列出的任何問題。 (即使這樣做,你也會通過黑客攻擊反編譯後的源代碼來深入挖掘自己的洞)。

0

儘管Java字節碼比直接編譯爲可執行代碼的語言稍微易於反編譯,但Java反編譯器是非常無效的,特別是當涉及到更復雜的代碼時,如果原始源代碼使用泛型,則更是如此。生成的源代碼往往具有在所有原來的沒有關係,如果編譯在所有...

  1. 如果你有一些人類產生版本的源代碼的那個類我建議嘗試解決這個問題,而不是試圖逆向工程.class文件。

  2. 如果你有一個.class文件,你可能仍然能夠擴展或覆蓋子類中的一些方法,從本質上修改它的行爲。使用像這樣的繼承並不總是可能的,但它通常有助於第三方黑盒代碼...

  3. 你可能想看看Javassist。它是一個字節碼操作庫,除了其他功能外,它還允許您在現有方法中插入Java語句。它確實有相當多的限制,但在某些情況下它可能會非常有幫助...