我的编译器类正在创建一个我们打算编译为Java Bytecode的语言.我们已经取得了很多进展,并且正在接近代码生成的时间.
我们在查找有关如何从编译器创建.class文件的信息时遇到问题.你有什么资源可以给我们一些帮助吗?我们已经有很多关于指令集的文档,但是需要有关如何直接填写类文件/ hex的写入的信息.
我们不需要有关反编译.class文件的信息或建议.
即使是从头开始编写.class文件的简单示例也是非常好的.
JVM规范不是我们追求的.我们真正需要的是一个例子或演练.
VM规范:类文件格式和Java虚拟机指令集应该这样做.
您可以查看字节代码工程库(BCEL)以获取一些灵感以及Findbugs(它必须读取/理解类文件).
有许多项目提供了创建Java类文件的高级接口,而无需自己编写类文件.看看以下内容:
ASM - http://asm.objectweb.org/
BCEL - http://jakarta.apache.org/bcel/
Trove - http://teatrove.sourceforge.net/trove.html
所有提供的API都可以创建类文件.您可以随时查看他们为此编写的代码并为您的编译器编写一些类似的代码,尽管我认为这是相当多的工作.
使用BCEL查看ClassGen,它应该能够以您想要的格式写出类文件,下面是一个简单的示例:
ClassGen cg = new ClassGen("HelloWorld", "java.lang.Object", "", ACC_PUBLIC | ACC_SUPER, null);
我很抱歉让你们失望,但虚拟机的规格是正是你追求的.如果你不能处理规范那么也许你不应该编写编译器.