Oolong and Gnoloo

11 篇文章 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 自带的工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值