【发布时间】:2011-03-10 04:18:23
【问题描述】:
我希望用 Java 字节码编写一个简短的程序(可能是 Hello World)。我只想使用我的文本编辑器编写字节码并运行它。我该怎么做?有例子吗?谢谢!
【问题讨论】:
-
阅读 docs.oracle.com/javase/specs/jvms/se7/html/index.html 并在 bash 中使用
printf:-)
我希望用 Java 字节码编写一个简短的程序(可能是 Hello World)。我只想使用我的文本编辑器编写字节码并运行它。我该怎么做?有例子吗?谢谢!
【问题讨论】:
printf :-)
字节码被写成实际的字节,通常不容易被普通的文本编辑器编辑。
这意味着您需要将文本表示转换为二进制的东西。一个合理的起点应该是像 Jasmin 这样的汇编程序。
【讨论】:
我创建了一个新的Java bytecode assembler,它向后兼容 Jasmin,但还添加了许多新功能并略微简化了语法。
这是一个如何编写 Hello World 程序的示例。
.class public hello
.super java/lang/Object
.method public static main : ([Ljava/lang/String;)V
.limit stack 10
.limit locals 10
getstatic java/lang/System out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream println (Ljava/lang/Object;)V
return
.end method
I've also written a tutorial on bytecode assembly。目前只涵盖Hello, World,如果有兴趣我可以继续。
【讨论】:
你可以试试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然后你像任何类一样运行它:
> java 你好世界 你好世界。更新
我看到您的问题提到“不使用 Javac 或 Java”。你能澄清一下你的意思吗?
【讨论】: