2014-07-11 33 views
1

我試圖找到一個Java反編譯,就像SWF的反編譯器,它允許編輯和重新編譯源,而無需任何地方導出,並執行任何外部的行動。我想要的是非常快速地對.jars進行一些小修改並保存,而不需要花費額外的時間用其他工具手動重新編譯java代碼。是否有像這樣的反編譯器?是否有類似的東西(比如.class變量編輯器)和是否可以製作像swf-decompiler這樣的Java反編譯器?的Java反編譯器和編輯器快速修改

+1

你做了什麼研究嗎? https://duckduckgo.com/?q=java+decompiler+and+editor ...而要求推薦一個工具的問題對於stackoverflow來說是不太合適的。 – clcto

+0

我不是要求推薦的工具,我想知道它是否可以在Java中使用 – Victor2748

+1

只需在啓用了調試的JVM中熱調整原始源代碼中的更改有什麼問題? –

回答

3

推薦一個工具是offtopic,但對於它是否是可能的問題,答案是yes和no。

的Java相對反編譯友好,所以對於簡單的情況下,應該可以創造這樣的一個工具。但是,有一些功能或模式會影響當前的反編譯器,並且考慮到語言的複雜性,不太可能有一種反編譯器能夠可靠地繞過任意的Java。

此外,雖然編譯Java比C損失少了很多信息,但它確實丟失信息。很明顯,你會失去一些東西,比如註釋和空白,但是在默認設置下,你會失去更多的東西:局部變量名稱,標誌和類型,泛型類型,編譯時間註釋等等。在某種程度上出於反思的目的,並且將-g標誌傳遞給編譯器可以強制它保存更多信息,但是不能完全恢復。

因此,在短期,你可以做一個合理的工作的大部分時間,但你不能永遠做它完美的所有時間。

另請注意,這是爲自己編寫的普通Java編寫的。如果這些類文件最初不是用Java編寫的,或者它們完全被混淆了,那麼您可能會忘記重新編譯。即使反編譯器產生可讀輸出,輸出也不可能被重編譯。

如果你想修改任意罐子,你需要的是一個反彙編器和彙編。我所知道的最好的是Krakatau(披露:我寫的)。這樣做的好處是它可以用於任何類文件,即使它們被混淆了。但是,它根本不是用戶友好的。如果你不知道如何繞過類文件格式和字節碼,那麼你將無法做出微不足道的改變(例如更改常量字符串)。

+0

根據我的理解,有可能在Java字節碼中表達功能,這些功能不能用Java語言輕鬆表達。有關這方面的一些見解,請參閱http://www.sable.mcgill.ca/publications/papers/2002-2/sable-paper-2002-2-slides.pdf。 –

+0

@ThorbjørnRavnAndersen我很清楚這一點。 – Antimony

+0

其他人可能不是。 –