2012-03-27 101 views
-1

你好,我對這一切都不太熟悉,但我想知道:因爲你知道有很多反編譯器可以讓java反編譯.class文件爲.java文件。我真的很想知道反編譯器背後的邏輯是什麼?我知道當我們編譯一個java代碼時,首先它被轉換爲字節代碼,然後轉換爲機器代碼。我認爲反編譯器將字節碼轉換爲java代碼。實際上我想知道反編譯的一部分是反編譯器,還是隻是一個簡單的解密?如果是這樣,該怎麼辦?謝謝你的答案..java反編譯器

回答

2

當你編譯java代碼時,它被轉換成字節碼。它是不是轉換成機器碼。

當您閱讀足夠多的java字節碼時,您可以輕鬆猜出源代碼的樣子。有些部分你不能重建,但很多部分可以。

例如(使用僞Java字節碼)

push int 5; 
push int 10; 
add int 
store int local 4; 

將大致轉換爲

int (the fourth local "something") = 5 + 10; 

反編譯器試圖在字節碼匹配模式來可能結構在Java源代碼會生成相同的字節碼。有時後面的映射難以置信,但對於Java來說,這非常容易。不用說,在編譯過程中會丟失一些信息。局部變量名稱並不總是需要正確的操作(所以他們可能會被丟棄)。評論通常也不存在。參數名稱通常不需要。反轉的程序在功能上與原來的程序相似。

逆向工程是一個鬆散應用的術語,不僅包含反編譯。反編譯被認爲是複製,並且一些反向工程技術不被認爲是複製。無塵室逆向工程涉及到

  1. 測試未知軟件,注意其行爲。
  2. 編寫捕獲未知軟件所需行爲特徵的文檔(或單元測試)。
  3. 創建一個新的軟件,通過捕獲的測試。

正如你所看到的,使用這種技術沒有原始源的複製。事實上,爲了確保沒有直接複製的要求,通常步驟3中涉及的人不是參與步驟1和步驟2的人。

-1

反編譯器很適合使用你沒有源代碼的庫。 Eclipse有一個很好的自動插件。

+1

對不起,這不是答案:) – HexagonSun 2012-03-27 15:52:38