Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境。
Bytecode Outline 插件可以把当前的正在编辑Java的文件或者class文件直接显示出其相应的字节码出来,而且可以进行两个Java文件的字节码比较或者两个class文件的字节码比较或一个Java文件与一个class文件进行字节码的比较。
安装
JDK:1.5.0 从http://java.sun.com 上去下载安装
Eclipse:3.1.1 从http://www.eclipse.org 上去下载解压
Bytecode Outline 主页http://asm.objectweb.org/eclipse/bco/index.html
技巧
Eclipse使用技巧之插件管理
提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去,一大堆,累死你:(
- 前提是你已经安装好了Eclipse工具了,比如安装在E:\OpenSource\Eclipse\目录下,以下这个目录以ìLIPSE_HOME%来进行表示;
- 此时默认的插件是在ìLIPSE_HOME%\plugins目录中的;
- 在ìLIPSE_HOME%下建立一个PlugInsNew的目录;
比如:E:\OpenSource\Eclipse\PlugInsNew\
- 你下载了个新的插件,比如叫做:XYZ 那么就在ìLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:

- 把下载的新插件的文件放在以下相应目录中
ìLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features
ìLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins - 建立相关的.link的文件
然后在ìLIPSE_HOME%\links目录里建立一个XYZ.link的文件
内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。
这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到ìLIPSE_HOME%\links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
如果你的ìLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径 - 删除,关闭Eclipse
删除ìLIPSE_HOME%\links\XYZ.link文件即可
删除ìLIPSE_HOME%\PlugInsNew\XYZ整个目录及文件 - 重新启动Eclipse即可
安装细节
Bytecode Outline插件安装方法有两种方式:
- 一种就是采用上一节的《Eclipse使用技巧之插件管理》
注意:因为Bytecode Outline的运行需要ASM Framework,所以也要下载这个文件
进入到http://forge.objectweb.org/projects/asm/ 中,下载到如下两项内容的文件
bytecode-outline 2.0.2 June 18, 2005,文件名de.loskutov.BytecodeOutline_2.0.2.jar
asm-plugin 2.2.1 December 14, 2005,文件名org.objectweb.asm_2.2.1.jar
并相应将这两个文件解压到
bytecode\eclipse\plugins\de.loskutov.BytecodeOutline_2.0.2\
bytecode\eclipse\plugins\org.objectweb.asm_2.2.1\
的目录下面,如下图所示,重新启动即可。
- 另一种就是通过Update Manager的形式来下载安装
地址是:http://download.forge.objectweb.org/eclipse-update/
安装步骤如下:Help => Software Updates => Find and Install…

选择Search for new features to install,下一步

新建一个站点,New Remote Site =>
Name里填入Bytecode Outline
URL里填入http://download.forge.objectweb.org/eclipse-update/
OK后,Finish完成之

于是出现这个站点的相关插件,对于Bytecode Outline来说,仅需要asm和bytecode-outline两项即可,当然把jonas-dev和org-exoplatform-eclipse-plugins也弄下来用用也不错的,全选上(^_^)

接下来就是接受协议并下一步了


四项内容,每个都要进行Change Location…,赫赫,比较麻烦了些,不过要是为了分开进行存放,你可以四个都存放到不一样的路径当中去,但是都要建立Link文件。

下载完成后,提示你安装,选择安装所有Install All。

顺利安装完成,出现重启提示。
注意:在点Yes之前,如果你刚才选择的路径不是默认的Eclipse插件的安装路径,你还是要建立一下Link文件!!!

重新启动Eclipse后,可以在菜单Window => Show View => Other => Java => 可以看到多了Bytecode、Bytecode Reference两项,把这两项打开显示出来。

使用
我们简单地创建一个示例工程,里面包含有一个接口类与两个实现该接口的实现类进行演示说明使用的方法。
接口类:
IHelloWorld.java public interface IHelloWorld { String sayHelloWorld(); }
实现类一:
HelloWorld1.javapublic class HelloWorld1 implements IHelloWorld{ public HelloWorld1(){ super(); } public String sayHelloWorld(){ return "Hello World HelloWorld1"; } }
实现类二:
HelloWorld2.javapublic class HelloWorld2 implements IHelloWorld{ public HelloWorld2(){ super(); } public String sayHelloWorld(){ return "Hello World HelloWorld2"; } }
双击打开IHelloWorld.java文件,在Bytecode窗口中可以看到如下信息:

当光标定位在sayHelloWorld上面,则Bytecode内容相应地进行改变。

点击ASM图标可以在true bytecode和ASMifier Java code 视图间进行切换

当光标定位在sayHelloWorld上面,则Bytecode内容相应地进行改变。

选中
Link With Editor图标,当Java编辑器中当前的Java文件改变时,Bytecode里的内容会跟随着进行改变,方便进行查看。


选中
时,会把相关的附加信息也显示,比如下面的String,就会把java.lang包名都显示出来了。

这些开关也可以通过下拉菜单来进行切换与设置,一样的操作方法。

选中
图标,可以切换到字节码的指令集视图上面来,当光标定位到不同的上面就会同样定位到相应的指令上,同样,在指令上面点击,相应地会定位到指令所对应的代码上去。

比较两个Java代码的字节码

相异之处特殊显示出来,以供查看。

切换到ASM视图进行比较

比较两个class代码的字节码

比较一个Java文件和一个class文件的字节码

选择比较其它的Java或class文件进行比较

选择文件

附带的JVM指令参考JVM Instruction Reference,有比较详细的资料说明。
Help => Help Contents => JVM Instruction Reference

更多的使用方法可以参阅: http://andrei.gmxhome.de/bytecode/index.html
总结
这是一个很不错的学习编译、反编译、字节码的工具。