GraalVM 上的 JVM 字节码 运行 可以由自定义的“TruffleInstrument”进行检测吗?

Can JVM bytecode running on the GraalVM be instrumented by a custom `TruffleInstrument`?

我想编写一个可以检测 Java 程序的 Truffle 工具 (或至少是 JVM 字节码程序)当它们在 GraalVM 上 运行 时。

我一直在研究执行细粒度的不同方法 Java 程序的检测以支持 运行 时间验证项目。 对我来说,操纵 Truffle AST 节点听起来比 我熟悉的更传统的 Java 仪器技术 (例如字节码重写,JVMTI)。

不幸的是,我开始担心无法制作松露 instrument even "see" JVM 字节码。来自我对 GraalVM 的实验 发射器(例如 polyglotjava),使用 Truffle API 进行实验(例如 org.graalvm.polyglot.Context), 并浏览了一些 Graal 编译器源代码,似乎是:

我创建了一个 GitHub 存储库,dwtj/ex_graalvm_with_custom_truffle 它展示了一些让我相信这一点的实验。在 特别是,脚本 10 和 11 似乎都表明 Java 从 Java脚本被GraalVM's simpletool忽略了。

现在,也许这不是一般 Truffle 乐器的问题。也许这个 只是这个特定松露乐器的一个限制。有什么办法 可以增强像 simpletool 这样的 Truffle 工具以支持 JVM 使用标准 Truffle API?

的字节码检测

我真的很想使用 GraalVM 的 Truffle API 来检测 JVM 字节码。所以 请告诉我我错了。

Truffle instruments can only "see" code which can be interpreted by a Truffle language (e.g. js or llvm).

这是完全正确的,JVM 字节码目前不是 Truffle 语言,即您目前不能为 java 使用 Truffle Instrumentation。

但是,Oracle 实验室正在进行 Java 字节码解释器作为 Truffle 语言(代号 espresso)的实施工作,应该很快就会可用。