是否可以直接用Java字节码指令编写程序?

时间:2012-12-30 16:11:40

标签: java

在.NET平台中,可以直接编写带有通用中间语言的程序,并使用IL Assembler(ILASM)编译源代码。

例如下面的代码是“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
}

是否有可能直接用.NET编写带有Java字节码指令的程序?

2 个答案:

答案 0 :(得分:7)

你可以看看Jasmin。来自维基百科,

  

有些项目为Java汇编程序提供了手动编写Java字节码的功能。汇编代码也可以由机器生成,例如通过针对Java虚拟机的编译器生成。值得注意的Java汇编程序包括:

     

Jasmin,获取Java类的文本描述,使用Java虚拟机指令集以简单的类似汇编语法编写,并生成Java类文件。

     

Jamaica,Java虚拟机的宏汇编语言。 Java语法用于类或接口定义。使用字节码指令指定方法体。

注意:我没有亲自使用过任何这些工具。

答案 1 :(得分:6)

你可以使用Jasmin

 .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 -jar jasmin.jar hello.j

您也可以参考this