我想写一个可以检测Java程序的Truffle仪器 (或至少是 JVM 字节码程序(当它们在 GraalVM 上运行时。
我一直在研究执行细粒度的不同方法 检测 Java 程序以支持运行时验证项目。 对我来说,操纵松露AST节点听起来比 我熟悉的更传统的Java仪器技术 (例如字节码重写,JVMTI(。
不幸的是,我开始担心不可能制作松露 仪器甚至"看到"JVM字节码。来自我对 GraalVM 的实验 发射器(例如polyglot
和java
(,使用松露 API 进行实验(例如org.graalvm.polyglot.Context
(, 并略读一些 Graal 编译器源代码,似乎:
- 松露乐器只能"看到"松露可以解释的代码 语言(例如
js
或llvm
(。 - GraalVM 发行版不支持通过 Truffle 语言的 JVM 字节码。 (相反,它通过传统的HotSpot解释器和支持JVM字节码 Graal JVMCI 编译器,与 Truffle 无关。
我已经创建了一个GitHub存储库,dwtj/ex_graalvm_with_custom_truffle
这证明了一些使我相信这一点的实验。在 特别是,脚本 10 和 11 似乎都表明 Java 调用自 JavaScript 被 GraalVM 的simpletool
忽略了。
现在,也许这不是松露乐器的问题。也许这个 只是这种特殊的松露乐器的一个限制。有没有办法 可以增强像simpletool
这样的松露乐器以支持JVM 使用标准松露 API 的字节码检测?
我真的很想使用 GraalVM 的 Truffle API 来检测 JVM 字节码。所以 请告诉我我错了。
仪器只能"看到"可以用 Truffle 语言(例如.js或 llvm(解释的代码。
这是完全正确的,JVM字节码目前不是Truffle语言,即您目前不能将Truffle Instrumentation用于java。
然而,Oracle实验室正在进行中,将Java字节码解释器实现为Truffle语言(代号espresso(,应该很快就会推出。