编译为 java 字节码(不使用 Java)

2022-09-02 10:10:32

我的编译器类正在创建一种我们打算编译为Java字节码的语言。我们已经取得了很大进展,并且正在接近代码生成的时间。

我们在查找有关如何从编译器创建.class文件的信息时遇到问题。您有什么资源可以给我们一些帮助吗?我们已经有很多关于指令集的文档,但需要有关如何直接填写类文件/编写十六进制的信息。

我们不需要有关反编译.class文件的信息或建议。

即使是从头开始写出.class文件的简单示例也会非常出色。

JVM规范不是我们所追求的。我们真正需要的是一个示例或演练。


答案 1

有许多项目提供了创建 Java 类文件的高级接口,而无需您自己编写类文件。请看以下内容:

所有这些都提供了一个 API 来创建类文件。你总是可以查看他们为此编写的代码,并为你的编译器编写一些类似的代码,尽管我认为这是相当多的工作。

使用 BCEL 查看 ClassGen,它应该使您能够以所需的格式写出类文件,下面是一个简单的示例:

ClassGen cg = new ClassGen("HelloWorld", "java.lang.Object",
                             "<generated>", ACC_PUBLIC | ACC_SUPER,
                             null);

答案 2

VM 规范:类文件格式Java 虚拟机指令集应该可以做到这一点。

你可以看看字节码工程库(BCEL)以获得一些灵感,以及Findbugs(它必须读取/理解类文件)。


推荐