中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

java反編譯代碼 java反編譯器

什么是Java代碼的編譯與反編譯

java代碼的編譯,就是你寫完代碼,java編譯器把它編譯成java虛擬機認識的代碼,然后再由虛擬機執(zhí)行它。反編譯就是反過來,當然這不是java虛擬機干的事兒,是你找反編譯工具干的事兒,把編譯過的代碼反編譯成人看得懂的源代碼。

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的蒼南網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

java反編譯

如今JAVA語言在全世界范圍正如火如荼般的流行,它廣范地應(yīng)用在INTERNET的數(shù)據(jù)庫、多媒體、CGI、及動態(tài)網(wǎng)頁的制作方面。1999年在美國對JAVA程序員的需求量首次超過C++!

作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。

JAVA是采用一種稱做“字節(jié)編碼”的程序結(jié)構(gòu),分為小程序(嵌入到HTML文件中)和應(yīng)用程序(直接在命令狀態(tài)下執(zhí)行)兩種類型。無論哪種結(jié)構(gòu),一旦用JAVAC 命令編譯后,均變成后綴為CLASS的同名可執(zhí)行文件。這種文件是不可閱讀的代碼。

經(jīng)查閱了SUN公司的JDK(JDK1.1.3)文檔資料后,我找到了一個據(jù)稱是可反編譯JAVA的JAVAP文件(EXE),這個文件位于\JDK\BIN\ 下面,經(jīng)按說明使用后,感到失望,原來這個“反編譯”僅可反編譯出JAVA程序的數(shù)據(jù)區(qū)(定義)、若干方法和類的引用等。

這里我用了一個簡單例子來說明問題。

JAVA的源程序hello_java.java如下:

import java.applet.*;

import java.awt.*;

public class hello_java extends Applet

{

public void paint(Graphics g)

{

g.drawString("Hello Java!\n",20,20);

}

}

經(jīng)用反編譯命令:javap -c -package -public -private hello_java hello.java

得到的反編譯結(jié)果(hello.java)如下:(有關(guān)javap命令的選擇參數(shù)請見其使用說明,這里-c表示選擇了反編譯)

Compiled from hello_java.java

public synchronized class hello_java extends java.applet.Applet

/* ACC_SUPER bit set */

{

public void paint(java.awt.Graphics);

public hello_java();

Method void paint(java.awt.Graphics)

0 aload_1

1 ldc #1

3 bipush 20

5 bipush 20

7 invokevirtual #6

10 return

Method hello_java()

0 aload_0

1 invokespecial #5 ()V

4 return

}

java反編譯的幾種方式

第一種方式:Help——Eclipse Marketplace

安裝eclipse自帶的插件( Decompiler )

第二種方式:使用反編譯工具(XJad2.2等)

第三種方式:在cmd中的輸入javap -verbose HellloWorld.class 回車,此處的HelloWorld.class為自己創(chuàng)建的HelloWorld.java編譯后的class文件

什么是Java代碼的編譯與反編譯?

Java代碼的編譯與反編譯

2017-02-21Hollis數(shù)盟

一、什么是編譯

1、利用編譯程序從源語言編寫的源程序產(chǎn)生目標程序的過程。

2、用編譯程序產(chǎn)生目標程序的動作。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯誤,給出提示信息。

二、什么是反編譯

計算機軟件反向工程(Reverseengineering)也稱為計算機軟件還原工程,是指通過對他人軟件的目標程序(可執(zhí)行程序)進行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運行方法等設(shè)計要素,某些特定情況下可能推導(dǎo)出源代碼。反編譯作為自己開發(fā)軟件時的參考,或者直接用于自己的軟件產(chǎn)品中。

三、Java類的編譯與反編譯

我們在最初學習Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統(tǒng),使用這些傳統(tǒng)語言寫的程序通常首先被編譯,然后被連接成單獨的、專門支持特定硬件平臺和操作系統(tǒng)的二進制文件。通常情況下,一個平臺上的二進制可執(zhí)行文件不能在其他平臺上工作。而Javaclass文件是可以運行在任何支持Java虛擬機的硬件平臺和操作系統(tǒng)上的二進制文件。

那么反編譯呢,就是通過helloworld.class文件得到j(luò)ava文件(或者說是程序員能看懂的Java文件)

四、什么時候會用到反編譯

1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那么我們可以把它反編譯成我們可以看得懂的文件。

2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現(xiàn)細節(jié),我們可以借助反編譯。

五、反編譯工具

1、javap

2、Jad:官網(wǎng)(墻裂推薦)

客戶端:

可以在官網(wǎng)下載可執(zhí)行文件,找到對應(yīng)的操作系統(tǒng)的對應(yīng)版本,然后進行安裝使用。

因為我使用的是linux操作系統(tǒng),所以我下載的是Linux版本的工具,這個工具下載好之后會有一個執(zhí)行文件,只要在執(zhí)行文件所在目錄執(zhí)行./jadhelloworld.class就會在當前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼

Eclipse插件:

下載地址在官網(wǎng)下載插件的jar包,然后將jar包放到eclipse的plugins目錄下‘在打開Eclipse,Eclipse-Window-Preferences-Java,此時你會發(fā)現(xiàn)會比原來多了一個JadClipse的選項,單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時文件的目錄。當然在JadClipse下還有一些子選項,如Debug,Directives等,按照默認配置即可。基本配置完畢后,我們可以查看一下class文件的默認打開方式,Eclipse-Window-Preferences-General-Editors-FileAssociations我們可以看到class文件的打開方式有兩個,JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼

Java反編譯代碼解釋:

public static String format(long paramLong)//paramLong是一個傳遞進來的long型整數(shù)

{

int i = 60 * 60;定義i=60乘60就是3600

long l1 = paramLong / i;定義l1等于paramLong除以i

long l2 = (paramLong - l1 * i) / 60;定義

long l3 = paramLong - l1 * i - l2 * 60;定義

String str1;聲明字符串

label64: String str2;label是監(jiān)聽

if (l1 10L)如果l1小于10

{

str1 = "0" + l1;字符串拼接

if (l2 = 10L)如果l2大于等于10

break label175;結(jié)束監(jiān)聽

str2 = "0" + l2;字符串拼接

label92: if (l3 = 10L)監(jiān)聽如果l3大于等于10

break label195;結(jié)束監(jiān)聽

}

for (String str3 = "0" + l3; ; str3 = l3)for循環(huán),

{

return str1 + ":" + str2 + ":" + str3;

str1 = l1;

break label64:

label175: str2 = l2;

label195: break label92:

}

}

主要研究一下監(jiān)聽是怎么用的吧

java反編譯的代碼可以用嗎

不行??蓤?zhí)行文件你即使反編譯出來 也不是源碼。包括所有的反編譯軟件,反編譯出來的,都不是源碼,別看著反編譯出來的代碼感覺是對的,有的反編譯出來還是可以運行的都不算。另外反編譯別人的軟件 ,只能自己研究,去過用于商業(yè)用途可是犯法的哦

新聞名稱:java反編譯代碼 java反編譯器
URL標題:http://m.rwnh.cn/article44/dodoiee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、關(guān)鍵詞優(yōu)化服務(wù)器托管、Google自適應(yīng)網(wǎng)站、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
石阡县| 理塘县| 洛川县| 张家港市| 加查县| 顺平县| 崇左市| 通许县| 长岭县| 垦利县| 开化县| 武邑县| 岳阳市| 通海县| 建阳市| 咸丰县| 长治市| 惠来县| 青州市| 敦煌市| 通山县| 普格县| 虹口区| 唐河县| 德安县| 威远县| 永寿县| 吉首市| 林州市| 上思县| 井陉县| 罗城| 梨树县| 鹤山市| 广安市| 榆中县| 贵溪市| 濉溪县| 天长市| 瓦房店市| 南昌县|