【问题标题】:Programming in Java bytecode [closed]Java字节码编程[关闭]
【发布时间】:2011-03-10 04:18:23
【问题描述】:

我希望用 Java 字节码编写一个简短的程序(可能是 Hello World)。我只想使用我的文本编辑器编写字节码并运行它。我该怎么做?有例子吗?谢谢!

【问题讨论】:

标签: java bytecode


【解决方案1】:

字节码被写成实际的字节,通常不容易被普通的文本编辑器编辑。

这意味着您需要将文本表示转换为二进制的东西。一个合理的起点应该是像 Jasmin 这样的汇编程序。

【讨论】:

    【解决方案2】:

    我创建了一个新的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,如果有兴趣我可以继续。

    【讨论】:

    • 链接失效
    • 很抱歉。看起来整个wiki都消失了。我会给他们发电子邮件,看看他们能不能把它带回来或有任何副本。
    【解决方案3】:

    你可以试试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”。你能澄清一下你的意思吗?

    【讨论】:

    • 这篇文章让我想伪造我今天正在做的工作并修补 Jasmin。 :-)
    • +1 Jasmin 是我想到的,但我记不起名字了。它出现在一本解释 JVM 内部原理的书中。我也忘记书名了,sigh...
    • @Bakkal:根据链接:“Jasmin 最初是作为由 Jon Meyer 和 Troy Downing 撰写并由 O'Reilly Associates 出版的《Java 虚拟机》一书的伴侣创建的。”
    • 通过“不使用 Javac 或 Java”,我只是说我想使用字节码编写代码。感谢您的信息!
    • 哇~这太酷了。这个JVM也是独立的吗?这可以在黑莓 jvm 上运行吗?
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多