Oolong:一種彙編語言, .j文件能夠編譯成.class文件java
Oo long烏狼工具
Oolong is closer to the JVM class file format than Java學習
(1)directive(指示)ui
(2)instruction(Oolong指令)編碼
What is Oolong and Gnoloo?orm
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. 」ip
通常用 Oolong 寫成的程序代碼都保存在擴展名爲 .j 的文件中。如ci
HelloOolong.j ------- 通過 Oolong 轉換 ------ 〉 HelloOolong.classget
HelloOolong.class ------- 通過 Gnoloo 轉換 ------ 〉 HelloOolong.jit
我是在瀏覽《 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 自帶的工具。