</p> 年夜上述结不美观不难看出该反编译未能将源轨范全译出来,像语句g.drawString("Hello Java!n",20,20); 就没有。跟着轨范量增添,未能编译的JAVA语句还会更多。所以这个反编译轨范仅能起个参考浸染。* m& F% f- i) {
好在有了INTERNET,笔者经由过程YAHOO很快找到了一个JAVA反编译“自由软件”(SHAREWARE),http://www.inter.nl.net/users/H.P.van.Vliet/mocha.htm 。 这个软件叫MOCHA,据说是一位30明年的加拿年夜的研究生所完成,仅是个“?”版,原因是这位叫做H.P.VAN.VLIET的小伙子患癌逝世了,十分可惜呀!
3 T# b3 c# V O7 q. i& x 经使用MOCHA反编译软件,感应这个软件十分好用,笔者试反编译多个JAVA轨范,均获得很好的结不美观。
$ r) t2 j: `" u; q5 ^. s" L 这里给出若何使用这个软件,首先,用WINZIP等将"mocha-b1.zip" 解开获得"mocha.zip"文件,"mocha.zip"不须再解开,这个包内搜罗了反编译的类文件,只需将其拷贝到JDK地址的目录下,如:c:jdkbin 此外,须设置路径:SET CLASSPATH=c:myclasses;c:jdkbinmocha.zip
' D G2 I' D0 W# K1 ` MOCHA用法:) i9 g) K& {, c# E) M; ?' c2 j
java mocha.Decompiler [-v] [-o] Class1.class Class2.class ...0 Q( n+ O* r R" }6 n
"java" 挪用Java虚拟机; j3 ]$ |: Z3 a( v0 C
"mocha.Decompiler" 指示要进行JAVA反编译
, {( {! k. j$ | "-v" 选择具体输出, a/ O$ A$ c% P
"-o" 选写入已有的.mocha 文件
: @8 d; P2 D' V "ClassX.class" 指出要反编译类名
& A2 {0 `5 P+ q, n) S* z0 v 注重,不需给出输出的JAVA文件名,因为MOCHA自动发生一个与CLASS同名但扩展名为MOCHA的JAVA源文件。
1 L3 I& Q2 c9 @# N7 m4 O8 I 对于上例,可用呼吁:0 O& K3 n. i0 |) ~5 g ]4 O% a
java mocha.Decompiler [-v] [-o] hello_java.class( [9 M" U, r, I W
获得的源文件:
) x8 c6 p3 L2 _* O/ R# D /* Decompiled by Mocha from hello_java.class */: L' c" w+ C$ S( Z
/* Originally compiled from hello_java.java */! x" }* h m. r) C0 A
import java.applet.Applet;
; @1 l# x* L/ N2 B# _0 U import java.awt.Graphics;
' i/ t; x" v2 D) V$ T# Q9 S public synchronized class hello_java extends Applet$ }1 u* S% }4 q. n Y
{0 M+ k( J ]% i( A3 W
public void paint(Graphics g)* _0 k' C+ H6 n
{
( H8 g4 ? S, q% o o+ } g.drawString("Hello Java!n", 20, 20);. A- B0 x" S! Q. F t
}$ c S) P s8 ?4 `0 }
public hello_java()
4 o, c3 a8 ^9 j8 U" R {# b3 B" N' `5 s5 D; T
}
: J" ~7 [1 ~# k: Z: t4 I }
7 R$ a' N. r$ s1 M: i 我们不难发现,此文件与编译前的JAVA源文件完全一样!笔者曾经用MOCHA反编译出最年夜为80K的源文件,均取得成功。
; e- w/ r( @5 K! T6 V: F 在此,笔者向英年早逝的VLIET暗示敬意,感谢感动他给我们留下这个工具软件。 |