用Java字节码编程

Cor*_*ens 46 java bytecode

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

Ada*_*ter 44

你可以尝试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
Run Code Online (Sandbox Code Playgroud)

你用它编译它:

> java -jar jasmin.jar hello.j

然后你就像任何一个类一样运行它:

> java HelloWorld
Hello World.

更新

我看到你的问题提到"不使用Javac或Java".你能澄清一下你的意思吗?

  • 这篇文章让我想假装今天我正在做的工作,并修补Jasmin.:-) (7认同)

Ant*_*ony 9

我创建了一个新的Java字节码汇编程序,它向后兼容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
Run Code Online (Sandbox Code Playgroud)

我还写过一个关于字节码汇编的教程.它目前仅涵盖Hello,World,但如果有兴趣,我可以继续.

  • 链接已损坏 (3认同)

bjg*_*bjg 8

你考虑过JBE(Java字节码编辑器)吗?
它基于Apache的字节码工程库(BCEL)


小智 8

也许这篇文章可以帮助你入门:字节码基础知识(有点旧,但你会得到这个想法).

类文件格式会派上用场太:d


Tho*_*sen 8

字节代码被写为实际字节,通常不能由普通文本编辑器编辑.

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