如何扩展 JVM 字节码?
How can I extend JVM bytecode?
我想创建一种可以编译成自己的字节码格式的编程语言和一个解释它的 VM。但我希望字节码与 JVM 兼容。我已经搜索了任何方法来向 JVM 字节码插入注释,这样我就可以用我自己的 VM 解析它们,但我找不到任何方法。我还尝试在字节数组的开头和结尾插入一些字节,但它产生了 ClassFormatException。有什么解决方法吗?
"compiles to its own bytecode format"和"compatible with JVM"是互斥的要求。
如果您希望 JVM 能够解析您的 class 文件,class 文件必须严格遵守 Java 虚拟机规范 Chapter 4. The class File Format。
扩展 class 文件格式的标准方法是 Attributes。您可以发明自己的属性并将它们包含到以下一个或多个结构中:
Scala 可以做到这一点,因此您应该检查一下。正如 apanging 所提到的,在类文件中插入 "comments" 的标准方法是使用属性。类文件格式定义了 JVM 使用的某些标准属性。但是,您还可以包含任意用户定义的属性,这些属性可以包含任意数据。这就是 Scala 用来包含 Scala 运行时所需的元数据的方法。
我想创建一种可以编译成自己的字节码格式的编程语言和一个解释它的 VM。但我希望字节码与 JVM 兼容。我已经搜索了任何方法来向 JVM 字节码插入注释,这样我就可以用我自己的 VM 解析它们,但我找不到任何方法。我还尝试在字节数组的开头和结尾插入一些字节,但它产生了 ClassFormatException。有什么解决方法吗?
"compiles to its own bytecode format"和"compatible with JVM"是互斥的要求。
如果您希望 JVM 能够解析您的 class 文件,class 文件必须严格遵守 Java 虚拟机规范 Chapter 4. The class File Format。
扩展 class 文件格式的标准方法是 Attributes。您可以发明自己的属性并将它们包含到以下一个或多个结构中:
Scala 可以做到这一点,因此您应该检查一下。正如 apanging 所提到的,在类文件中插入 "comments" 的标准方法是使用属性。类文件格式定义了 JVM 使用的某些标准属性。但是,您还可以包含任意用户定义的属性,这些属性可以包含任意数据。这就是 Scala 用来包含 Scala 运行时所需的元数据的方法。