成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談Java程序的反編譯

開發 后端
Java是一種簡單的,面向對象的,分布式的,解釋型的,健壯安全的,結構中立的,可移植的,性能優異、多線程的動態語言。本文介紹Java程序的反編譯,供參考。

所謂反編譯就是把編譯后的文件轉成源代碼,本來是看不到源碼的,反編譯后就可以看到了。作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。

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

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

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

JAVA的源程序hello_java.java如下:

 

  1. import java.applet.*;  
  2. import java.awt.*;  
  3. public class hello_java extends Applet  
  4. {  
  5. public void paint(Graphics g)  
  6. {  
  7. g.drawString("Hello Java!\n",20,20);  
  8. }  

 

經用反編譯命令:javap -c -package -public -private hello_java hello.java
得到的反編譯結果(hello.java)如下:(有關javap命令的選擇參數請見其使用說明,這里-c表示選擇了反編譯)
 

  1. Compiled from hello_java.java  
  2. public synchronized class hello_java extends java.applet.Applet  
  3. /* ACC_SUPER bit set */ 
  4. {  
  5. public void paint(java.awt.Graphics);  
  6. public hello_java();  
  7. Method void paint(java.awt.Graphics)  
  8. 0 aload_1  
  9. 1 ldc #1 
  10. 3 bipush 20 
  11. 5 bipush 20 
  12. 7 invokevirtual #6 
  13. 10 return 
  14. Method hello_java()  
  15. 0 aload_0  
  16. 1 invokespecial #5 V>  
  17. 4 return 

從上述結果不難看出該反編譯未能將源程序全譯出來,像語句g.drawString("Hello Java!\n",20,20); 就沒有。隨著程序量增加,未能編譯的JAVA語句還會更多。所以這個反編譯程序僅能起個參考作用。

幸虧有了INTERNET,筆者通過YAHOO很快找到了一個JAVA反編譯“自由軟件”(SHAREWARE),http://www.inter.nl.net/users/H.P.van.Vliet/mocha.htm 。 這個軟件叫MOCHA,據說是一位30來歲的加拿大的研究生所完成,僅是個“?”版,原因是這位叫做H.P.VAN.VLIET的小伙子患癌逝世了,十分可惜呀!

經使用MOCHA反編譯軟件,感到這個軟件十分好用,筆者試反編譯多個JAVA程序,均得到很好的結果。

這里給出如何使用這個軟件,首先,用WINZIP等將"mocha-b1.zip" 解開得到"mocha.zip"文件,"mocha.zip"不須再解開,這個包內包括了反編譯的類文件,只需將其拷貝到JDK所在的目錄下,如:c:\jdk\bin\ 此外,須設置路徑:SET CLASSPATH=c:\myclasses;c:\jdk\bin\mocha.zip

MOCHA用法:

 

  1. java mocha.Decompiler [-v] [-o] Class1.class Class2.class ... 

 

"java" 調用Java虛擬機

"mocha.Decompiler" 指示要進行JAVA反編譯

"-v" 選擇詳細輸出

"-o" 選寫入已有的.mocha 文件

"ClassX.class" 指出要反編譯類名

注意,不需給出輸出的JAVA文件名,因為MOCHA自動產生一個與CLASS同名但擴展名為MOCHA的JAVA源文件。

對于上例,可用命令:

 

  1. java mocha.Decompiler [-v] [-o] hello_java.class 

 

得到的源文件:

 

  1. /* Decompiled by Mocha from hello_java.class */ 
  2. /* Originally compiled from hello_java.java */ 
  3. import java.applet.Applet;  
  4. import java.awt.Graphics;  
  5. public synchronized class hello_java extends Applet  
  6. {  
  7. public void paint(Graphics g)  
  8. {  
  9. g.drawString("Hello Java!\n"2020);  
  10. }  
  11. public hello_java()  
  12. {  
  13. }  
  14. }  

 

我們不難發現,此文件與編譯前的JAVA源文件完全一樣!筆者曾經用MOCHA反編譯出最大為80K的源文件,均取得成功。

在此,筆者向英年早逝的VLIET表示敬意,感謝他給我們留下這個工具軟件。

【編輯推薦】

  1. Java反編譯之代碼混淆
  2. Java反編譯的幾種常用方法
  3. Eclipse反編譯插件Jadclipse介紹
  4. 防止JAVA字節碼反編譯問題解決方案

 

責任編輯:于鐵 來源: 比特網
相關推薦

2011-05-31 14:18:17

2011-05-31 14:38:04

Android 反編譯

2017-02-20 13:54:14

Java代碼編譯

2021-03-07 16:31:35

Java編譯反編譯

2015-01-15 11:01:43

2009-06-11 13:49:30

2009-06-11 14:11:33

代碼混淆Java反編譯

2018-05-11 10:16:41

微信小程序反編譯

2011-05-31 14:52:13

Android 反編譯 方法

2012-11-06 10:02:04

JavaJadEclipse

2014-09-25 10:28:02

反編譯工具Java

2018-05-11 10:22:05

小程序源碼分析

2015-01-15 10:15:16

Android反編譯-smail語法

2021-05-18 10:18:15

Java

2018-09-05 20:00:23

編程語言Java程序員

2017-11-27 15:43:49

Androidjadx反編譯

2014-08-05 10:51:09

Xcode警告Objective-C

2024-05-22 09:36:42

開源NET

2025-06-17 07:35:27

Spring程序jadx

2025-06-17 09:31:24

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久一级免费视频 | 狠狠操电影 | 成人av一区二区三区 | 蜜臀av日日欢夜夜爽一区 | 亚洲视频一区在线观看 | 在线免费观看黄视频 | 亚洲国产激情 | 欧美久久一区二区三区 | 久久国产精品偷 | 一区二区av | 日韩高清一区 | 欧美电影大全 | 成人黄色电影在线播放 | 亚洲精品高清视频在线观看 | 午夜不卡一区二区 | 欧美a免费 | 亚洲品质自拍视频 | 日韩精品一区在线 | 美女视频黄的免费 | 中文字幕视频在线 | 男女午夜免费视频 | 国产一区二区三区视频免费观看 | 中文字幕av在线 | a级片在线观看 | 国产精品高潮呻吟久久 | 高清黄色毛片 | 国产午夜精品一区二区三区嫩草 | 激情一区二区三区 | 国产亚洲一区二区三区在线观看 | 中文字幕乱码一区二区三区 | 欧美精品啪啪 | 自拍偷拍亚洲欧美 | 91视频18 | 成人精品一区二区三区中文字幕 | 欧美精品片 | 久久这里只有精品首页 | 日日久 | 欧美人妇做爰xxxⅹ性高电影 | 亚洲一区在线日韩在线深爱 | 久久久久久九九九九九九 | 成人av免费在线观看 |