2012-12-30 26 views
11

在.NET平臺能夠直接寫入與公共中間語言程序並編譯IL彙編程序(ILASM)的來源。是否有可能直接用Java字節碼指令編寫程序?

例如下面的代碼是 「Hello World」 程序。

.assembly Hello {} 
.assembly extern mscorlib {} 
.method static void Main() 
{ 
    .entrypoint 
    .maxstack 1 
    ldstr "Hello, world!" 
    call void [mscorlib]System.Console::WriteLine(string) 
    ret 
} 

是否有可能直接使用Java編寫帶有Java字節碼指令的程序?

+1

有是asm(http://asm.ow2.org/)。 – fge

+0

不回答你的問題(這是肯定的,但不是簡單的;))這裏是一個不錯的博客文章與引用http://arhipov.blogspot.se/2011/01/java-bytecode-fundamentals.html?m=1 –

+0

爲什麼有人想要或需要這樣做?由於它是一個基於堆棧的機器,我懷疑有沒有什麼技巧可以讓編譯器不知道。 – James

回答

7

您可以檢查出茉莉。從維基百科,

一些項目提供Java彙編程序,以便手動編寫Java字節碼。彙編代碼也可以由機器生成,例如通過針對Java虛擬機的編譯器。值得注意的Java彙編程序包括:

Jasmin,採用Java類的文本描述,使用Java虛擬機指令集以簡單的彙編語法編寫,並生成Java類文件。

牙買加,Java虛擬機宏彙編語言。 Java語法用於類或接口定義。方法體使用字節碼指令來指定。

注:我沒有使用任何工具的個人。

+0

可以使用這些工具在正常的Java源代碼中嵌入內嵌的JVM指令嗎? – Philipp

+0

@Philipp - 我從來沒有聽說過允許內聯「彙編語言」的javac版本。 (我也不確定自從循環註釋大屠殺以來,Jasmin是如何工作的。) –

6

你可以使用茉莉

.class public HelloWorld 
.super java/lang/Object 

.method public static main([Ljava/lang/String;)V 
.limit stack 3 
.limit locals 1 

    getstatic  java/lang/System/out Ljava/io/PrintStream; 
    ldc   "Hello World." 
    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V 

return 

.end method 

你使用編譯:

Java的罐子jasmin.jar hello.j

您可以參考this

相關問題