国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JAVA的反編譯

2019-11-18 11:51:40
字體:
供稿:網(wǎng)友

  作者: 于瑤
  如今java語(yǔ)言在全世界范圍正如火如荼般的流行,它廣范地應(yīng)用在INTERNET的數(shù)據(jù)庫(kù)、多媒體、CGI、及動(dòng)態(tài)網(wǎng)頁(yè)的制作方面。1999年在美國(guó)對(duì)JAVA程序員的需求量首次超過C++!
  作者因最近分析一些JAVA程序,對(duì)JAVA的反編譯進(jìn)行了一番了解,下面將我所了解的情況作以下介紹,希望對(duì)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)文檔資料后,我找到了一個(gè)據(jù)稱是可反編譯JAVA的JAVAP文件(EXE),這個(gè)文件位于/JDK/BIN/ 下面,經(jīng)按說明使用后,感到失望,原來這個(gè)“反編譯”僅可反編譯出JAVA程序的數(shù)據(jù)區(qū)(定義)、若干方法和類的引用等。
  這里我用了一個(gè)簡(jiǎn)單例子來說明問題。
  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ù)請(qǐng)見其使用說明,這里-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
  /">
  3 bipush 20
  5 bipush 20
  7 invokevirtual
  10 return
  Method hello_java()
  0 aload_0
  1 invokespecial
  4 return
  }
  從上述結(jié)果不難看出該反編譯未能將源程序全譯出來,像語(yǔ)句g.drawString(/"Hello Java!/n/",20,20); 就沒有。隨著程序量增加,未能編譯的JAVA語(yǔ)句還會(huì)更多。所以這個(gè)反編譯程序僅能起個(gè)參考作用。
  幸虧有了INTERNET,筆者通過YAHOO很快找到了一個(gè)JAVA反編譯“自由軟件”(SHAREWARE),http://www.inter.nl.net/users/H.P.van.Vliet/mocha.htm 。 這個(gè)軟件叫MOCHA,據(jù)說是一位30來歲的加拿大的研究生所完成,僅是個(gè)“?”版,原因是這位叫做H.P.VAN.VLIET的小伙子患癌逝世了,十分可惜呀!
  經(jīng)使用MOCHA反編譯軟件,感到這個(gè)軟件十分好用,筆者試反編譯多個(gè)JAVA程序,均得到很好的結(jié)果。
  這里給出如何使用這個(gè)軟件,首先,用WinZip等將/"mocha-b1.zip/" 解開得到/"mocha.zip/"文件,/"mocha.zip/"不須再解開,這個(gè)包內(nèi)包括了反編譯的類文件,只需將其拷貝到JDK所在的目錄下,如:c:/jdk/bin/ 此外,須設(shè)置路徑:SET CLASSPATH=c:/myclasses;c:/jdk/bin/mocha.zip
  MOCHA用法:
  java mocha.Decompiler [-v] [-o] Class1.class Class2.class ...
  /"java/" 調(diào)用Java虛擬機(jī)
  /"mocha.Decompiler/" 指示要進(jìn)行JAVA反編譯
  /"-v/" 選擇具體輸出
  /"-o/" 選寫入已有的.mocha 文件
  /"ClassX.class/" 指出要反編譯類名
  注重,不需給出輸出的JAVA文件名,因?yàn)镸OCHA自動(dòng)產(chǎn)生一個(gè)與CLASS同名但擴(kuò)展名為MOCHA的JAVA源文件。
  對(duì)于上例,可用命令:
  java mocha.Decompiler [-v] [-o] hello_java.class
  得到的源文件:
  /* Decompiled by Mocha from hello_java.class */
  /* Originally compiled from hello_java.java */
  import java.applet.Applet;
  import java.awt.Graphics;
  public synchronized class hello_java extends Applet
  {
  public void paint(Graphics g)
  {
  g.drawString(/"Hello Java!/n/", 20, 20);
  }
  public hello_java()
  {
  }
  }
  我們不難發(fā)現(xiàn),此文件與編譯前的JAVA源文件完全一樣!筆者曾經(jīng)用MOCHA反編譯出最大為80K的源文件,均取得成功。 在此,筆者向英年早逝的VLIET表示敬意,感謝他給我們留下這個(gè)工具軟件。
  如讀者下載MOCHA有困難,可給筆者來電子郵件,筆者可將MOCHA寄去。
  參考文獻(xiàn):
  1) http://www.inter.nl.net/users/H.P.van.Vliet/mocha.htm
  2) http://www.javasoft.com
  3) http://java.sun.com
  4) http://www.yahoo.com

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广丰县| 宁远县| 大城县| 任丘市| 牟定县| 长宁区| 西林县| 新和县| 江源县| 贡嘎县| 佛教| 湘潭市| 阿荣旗| 乌拉特后旗| 阿尔山市| 游戏| 凤冈县| 洮南市| 丽江市| 黑龙江省| 唐海县| 靖江市| 蒙山县| 民丰县| 凌源市| 鞍山市| 孟州市| 海南省| 左云县| 沁源县| 海原县| 博白县| 南昌市| 晴隆县| 东海县| 江西省| 尤溪县| 普陀区| 叶城县| 甘南县| 海淀区|