用Java字节码编程

问题描述 投票:45回答:6

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

java bytecode
6个回答
42
投票

你可以试试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 HelloWorld
Hello World.

更新

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


9
投票

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


8
投票

也许这篇文章可以帮助你入门:Bytecode basics(有点旧,但你会得到这个想法)。

class file format也会派上用场:D


8
投票

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

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


8
投票

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


0
投票

这个人在这里指导您逐步编写hello world程序的类文件。非常令人兴奋的东西:-) https://medium.com/@davethomas_9528/writing-hello-world-in-java-byte-code-34f75428e0ad

© www.soinside.com 2019 - 2024. All rights reserved.