我想编写一个 Truffle 工具,当 Java 程序(或至少 JVM 字节码程序)在 GraalVM 上运行时,它可以检测它们。
我一直在研究不同的方法来执行 Java 程序的细粒度检测以支持运行时验证项目。对我来说,操作 Truffle AST 节点听起来比我熟悉的更传统的 Java 插桩技术(例如字节码重写、JVMTI)更有吸引力。
不幸的是,我开始担心制作 Truffle 工具甚至“看到”JVM 字节码是不可能的。从我对 GraalVM 启动器的实验(例如polyglot和java)、对 Truffle API 的实验(例如
org.graalvm.polyglot.Context)以及浏览一些 Graal 编译器源代码来看,似乎:
- Truffle 工具只能“看到”可由 Truffle 语言(例如
js或llvm)解释的代码。 - GraalVM 发行版不支持通过 Truffle 语言实现的 JVM 字节码。(相反,它通过传统的 HotSpot 解释器和 Graal JVMCI 编译器支持 JVM 字节码,这与 Truffle 无关。)
我创建了一个 GitHub 存储库,dwtj/ex_graalvm_with_custom_truffle
它展示了一些让我相信这一点的实验。特别是,脚本 10 和 11 似乎都表明从 JavaScript 调用的 Java 被GraalVM 的simpletool.
现在,也许这对于一般的松露乐器来说不是问题。也许这只是这种特殊 Truffle 乐器的限制。是否有某种方法simpletool可以增强 Truffle 工具,以使用标准 Truffle API 支持 JVM 字节码工具?
我真的很想使用 GraalVM 的 Truffle API 来检测 JVM 字节码。所以请告诉我我错了。