文档章节

Oolong and Gnoloo

Oscarfff
 Oscarfff
发布于 2016/07/21 10:17
字数 752
阅读 42
收藏 0

Oolong:一种汇编语言, .j文件可以编译成.class文件

Oo long乌狼

Oolong is closer to the JVM class file format than Java

(1)directive(指示)

(2)instruction(Oolong指令)

What is Oolong and Gnoloo?

Oolong 是一种为 Java 虚 拟机定制的汇编语言, 其作者为 Joshua Engel , Gnoloo 则是将 .class 文件转成 Onlong 语言的一种反汇编工具。引用 Joshua Engel 书中的一段描述“ the Oolong language is nearly equivalent to the class file format but easier to read and write. ”

 

一般用 Oolong 写成的程序代码都保存在扩展名为 .j 的文件中。如

HelloOolong.j  ------- 经过 Oolong 转换 ------ 〉   HelloOolong.class

HelloOolong.class  ------- 经过 Gnoloo 转换 ------ 〉 HelloOolong.j

 

我是在浏览《 Programming for the Java™ Virtual Machine 》这本书的时候遇到这些的,好奇驱使着我深入的了解一下 Oolong 这种汇编语言。在这里我不想说 Oolong 的指令与语法,我想 Oolong 和 Gnoloo 可以作为一种工具,来帮助 Java 学 习者了解 Java 程序的运行或者说看看 JVM 是 如何运行一个一个 .class 文件的。如果真的对之很是感兴趣的话或者说是一个 super fans ,你可以学习一下 Oolong ,并用 Oolong 写出一些可以运行在 JVM 上 的程序。

 

下载 Oolong 和 Gnoloo

Oolong 和 Gnoloo 是由 Joshua Engel 编写的汇 编语言及工具,我们可以通过下面的链接下载到相关包:

http://www.scifac.ru.ac.za/resourcekit/download/Engel.zip

 

解压后进入 Engel 目 录下,有三个重要的 class 文件 Oolong.class 、 Gnoloo.class 和 DumpClass.class 。

 

编译和反编译 Onlong 程序

Now ! 我们使用 Oolong 语法写一个“ Hello Oolong! ”程序(该程序改变自 《 Programming for the Java™ Virtual Machine 》一书的 2.1 小节的那个 “ Hello World !”程序),代码如下:

 

//HelloOolong.j 代码 :

.class public HelloOolong

.super java/lang/Object

 

.method public static main([Ljava/lang/String;)V

.limit stack 2

.limit locals 1

   getstatic java/lang/System/out Ljava/io/PrintStream;

   ldc "Hello Oolong!"

   invokevirtual java/io/PrintStream/println

      (Ljava/lang/String;)V

   return

.end method

.end class

 

我们不关心具体的语法和指令。

打开控制台,进入该目录运行:

java Oolong HelloOolong.j 在当前目录下会产生 HelloOolong.class 文件

运行该 class 文 件我们会看到控制台输出:

Hello Oolong!

 

下面我们利用 Gnoloo 反编译 class 文件:(前提删除 HelloOolong.j 文件)

java Gnoloo HelloOolong.class  在当前目录下会产生 HelloOolong.j 文件

 

Oolong 和 Gnoloo 为我们提供了一套查看 JVM 汇 编代码的解决方案,我们可以将由 javac 生成的 class 文件反汇编为 Oolong 汇编代码。

如: HelloOolong.java ----- javac----------> HelloOolong.class --------Gnoloo-----> HelloOolong.j

之后我们便可以查看汇编代码,然后了解我们的代码时如何在 JVM 上运行的了。

 

DumpClass 工具

在下载的包中还有一个很好用的工具,那就是 DumpClass ,它可以输出 class 文件的信息。 使用 方法: java DumpClass HelloOolong.class , class 文件的信息就会被输出到屏幕上。

 

 

查看 Java 字节码 ( 汇编码 ) 的另一种方法

javap –c –verbose HelloOolong

javap 是 JDK 自带的工具。

本文转载自:http://blog.csdn.net/tuhuolong/article/details/5954427

上一篇: java byteviewer
下一篇: 网络安全学院
Oscarfff
粉丝 73
博文 816
码字总数 97116
作品 0
崇明
后端工程师
私信 提问
如何分析JAVA字节码--Oolong反编译

处于C和机器语言之间有一种叫汇编语言,它很接近机器语言,却又可以使人可以看得懂这些指令,C语言的编译器会先将代码翻译成汇编,然后再翻译成机器语言。 其实对于Java,刚开始接触也有些迷...

城固如春
2016/11/15
55
0
iOS游戏开发开源库总结

游戏将在以后一直是软件行业的发展方向,在appstore上,游戏占了很大的比例。我也是游戏出生,总结一下自己用过的开源游戏引擎,接2D与3D分类。 2D: cocos2d 3D: isGL 3D Galaxy Game Engine...

长平狐
2012/08/13
100
0
常用iOS游戏开发工具与SDK

常用iOS游戏开发工具与SDK2D游戏开发框架cocos2d-iPhone,iOS平台最流行的开源2D游戏引擎,包含两个较大的版本:0.9x和2.x,其中0.9x支持OpenGL ES,2.x支持OpenGL ES 2.0。Objective-C编写,...

Durian_2012
2014/01/16
772
0

没有更多内容

加载失败,请刷新页面

加载更多

没有更多内容

一套完整的软件开发流程是怎样的?

做什么事都需要一个流程,软件开发也不例外。 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点。为什么程序员大多秃顶?他们有那么...

我想造火箭
8分钟前
2
0
漂亮思维导图怎样绘制?教你快速套用思维导图模板绘制d

用MindMaster软件绘制思维导图,会更加高效和美观!因为MindMaster是一款专业的思维导图软件,零基础经验的朋友花费5分钟时间就能掌握它的相关画法。以下是电脑软件思维导图画法的简单步骤。...

工具分享
11分钟前
3
0
SVN 装完了 但是再bin 下边没有svn.exe

bin中找不到svn.exe文件 找到你的安装包重新运行 选择modify

简小姐
11分钟前
1
0
linux 软链接与 硬链接的区别

软链接与硬链接的区别 1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。 2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问...

突突突酱
12分钟前
1
0
新特性解读 | MySQL 8.0.18 有权限控制的复制

原文:Replication with restricted privileges https://mysqlhighavailability.com/replication-with-restricted-privileges/ 作者:Pedro Figueiredo 翻译:管长龙 背景 MySQL 8.0.18 以前......

爱可生
20分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部