我想编写一个 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 字节码。所以请告诉我我错了。