我用兩個反編譯器JD-GUI和Luyten反編譯.jar文件,但結果不同。爲什麼。反編譯器中的jar反編譯結果不同?
例如,Luyten的結果具有更具體的名稱空間。
此外,某些行中的源代碼也有所不同。
爲什麼兩個反編譯器反編譯相同的.jar文件有所不同?
我用兩個反編譯器JD-GUI和Luyten反編譯.jar文件,但結果不同。爲什麼。反編譯器中的jar反編譯結果不同?
例如,Luyten的結果具有更具體的名稱空間。
此外,某些行中的源代碼也有所不同。
爲什麼兩個反編譯器反編譯相同的.jar文件有所不同?
您列出的反編譯器使用不同的後端來處理java字節碼的解析。
你可以想像不同的學者將反編譯器翻譯成現代英語。由學者抄錄的原始資料「Luyten」和「JD-GUI」是一樣的,但每個學者都抄錄不同的文字。兩者都創造現代英語,通常相當清晰,但每個人都有自己的微小差異。
例如:如果古源材料指出,"a man reached down and picked up an apple"
學者可能會說:
該男子拿起一個蘋果。
那人抓起一個蘋果。
都得到跨越意義,但它們之間略有差別。有時候,人們可能會比其他人更瞭解源材料的奇怪怪癖,因而會產生比另一種更準確的結果。
例如,JD-GUI can't decompile a method if the last instruction of a method is the last one in a try-catch block但Procyon將能夠將它翻譯成Java它就好了。
因爲有多個可能產生相同字節碼的Java源代碼。 – EJP
*產生完全相同字節碼的*「java源代碼」*之間的唯一區別將基於語法。 rick正在查看的字節碼已被編譯。反編譯器處理翻譯的方式不同。例如,如果要將JD-GUI,CFR,Procyon和Fernflower的輸出複製粘貼到java文件中並進行編譯,則它們不會生成完全相同的字節碼。當然它的功能相同*(不包括邊緣情況下)*但這不是重點。重點是任何兩個反編譯器之間將字節碼轉換回java的過程是不同的。 –