複製鏈接
請複製以下鏈接發送給好友

JD-GUI

鎖定
《JD-GUI》是一款反編譯軟件,JD分為JD-GUI、JD-Eclipse兩種運行方式,JD-GUI是以單獨的程序的方式運行,JD-Eclipse則是以一個Eclipse插件的方式運行。
中文名
JD-GUI
性    質
反編譯器
類    別
手機軟件
操    作
電腦、計算機

JD-GUI簡介

基礎知識
什麼是反編譯器
大家都知道,將源代碼轉換成二進制執行代碼的過程叫“編譯”,比如將C源代碼編譯成exe可執行文件;那麼把二進制執行代碼轉換成源代碼的過程就叫“反編譯”,比如把exe轉換為C源代碼就叫“反編譯”。
由於主流的C的編譯器都進行了代碼的優化,因此把C編譯生成的exe文件反編譯成C代碼非常困難。但是像Java、.net這樣基於虛擬機技術的編程語言則反編譯非常容易,Java平台下有Jad、Jode、JD等反編譯器,.net平台下則有Reflector等反編譯器,反編譯質量非常高,甚至和源代碼幾乎沒什麼差別。

JD-GUI應用示例

反編譯得到的是源代碼嗎?
反編譯得到的代碼是非常接近於源代碼,但是或多或少與源代碼有一些差異的,比如一些表達式被優化掉了,比如:
下面的源代碼:
int i=1+1;
學過《編譯原理》的同學知道有“常量優化”這個編譯優化算法,因此上邊的源代碼一般會被優化為:int i=2;
由於在編譯過程中已經進行了優化,把“1+1”這個原始的信息丟掉了,因此反編譯出來的代碼只能是:
int i=2;
可以看到反編譯得到的代碼和源代碼是有區別的。
比如:andriod中
download = (Button)findViewById(R.id.xiaz);
被優化成了download = (Button)findViewById(0x7f070018);

JD-GUI安全性

程序可以反編譯豈不是很不安全?
可以採用代碼混淆等技術來加大反編譯的難度和降低反編譯代碼的可讀性,但是完全避免反編譯是不可能的。

JD-GUI原理

反編譯器的原理是什麼?
由於Java、.net這樣的基於虛擬機技術的語言都是採用了ByteCode的二進制結構,因此很容易將ByteCode轉化為“抽象語法樹”(簡稱AST,《編譯原理》這門課中的概念),然後採用反編譯器就可以將AST轉換為代碼了。
本詞條資料來源於soso網友此處參考資料無法引用對於作者表示抱歉!!!
如需將預覽的.class文件轉換成.java文件只需點擊File菜單裏的save即可。