Oolong and Gnoloo
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 虛 擬機(jī)定制的匯編語言, 其作者為 Joshua Engel , Gnoloo 則是將 .class 文件轉(zhuǎn)成 Onlong 語言的一種反匯編工具。引用 Joshua Engel 書中的一段描述“ the Oolong language is nearly equivalent to the class file format but easier to read and write. ”
?
一般用 Oolong 寫成的程序代碼都保存在擴(kuò)展名為 .j 的文件中。如
HelloOolong.j? ------- 經(jīng)過 Oolong 轉(zhuǎn)換 ------ 〉 ? HelloOolong.class
HelloOolong.class? ------- 經(jīng)過 Gnoloo 轉(zhuǎn)換 ------ 〉 HelloOolong.j
?
我是在瀏覽《 Programming for the Java? Virtual Machine 》這本書的時候遇到這些的,好奇驅(qū)使著我深入的了解一下 Oolong 這種匯編語言。在這里我不想說 Oolong 的指令與語法,我想 Oolong 和 Gnoloo 可以作為一種工具,來幫助 Java 學(xué) 習(xí)者了解 Java 程序的運行或者說看看 JVM 是 如何運行一個一個 .class 文件的。如果真的對之很是感興趣的話或者說是一個 super fans ,你可以學(xué)習(xí)一下 Oolong ,并用 Oolong 寫出一些可以運行在 JVM 上 的程序。
?
下載 Oolong 和 Gnoloo
Oolong 和 Gnoloo 是由 Joshua Engel 編寫的匯 編語言及工具,我們可以通過下面的鏈接下載到相關(guān)包:
http://www.scifac.ru.ac.za/resourcekit/download/Engel.zip
?
解壓后進(jìn)入 Engel 目 錄下,有三個重要的 class 文件 Oolong.class 、 Gnoloo.class 和 DumpClass.class 。
?
編譯和反編譯 Onlong 程序
Now ! 我們使用 Oolong 語法寫一個“ Hello Oolong! ”程序(該程序改變自 《 Programming for the Java? Virtual Machine 》一書的 2.1 小節(jié)的那個 “ 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
?
我們不關(guān)心具體的語法和指令。
打開控制臺,進(jìn)入該目錄運行:
java Oolong HelloOolong.j 在當(dāng)前目錄下會產(chǎn)生 HelloOolong.class 文件
運行該 class 文 件我們會看到控制臺輸出:
Hello Oolong!
?
下面我們利用 Gnoloo 反編譯 class 文件:(前提刪除 HelloOolong.j 文件)
java Gnoloo HelloOolong.class? 在當(dāng)前目錄下會產(chǎn)生 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 字節(jié)碼 ( 匯編碼 ) 的另一種方法
javap –c –verbose HelloOolong
javap 是 JDK 自帶的工具。
總結(jié)
以上是生活随笔為你收集整理的Oolong and Gnoloo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM工作原理和特点
- 下一篇: Eclipse通过JDWP调试Dalvi