在GraalVM上运行的JVM字节码可以通过自定义的"TruffleInstrument"进行检测吗



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

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

不幸的是,我开始担心不可能制作松露 仪器甚至"看到"JVM字节码。来自我对 GraalVM 的实验 发射器(例如polyglotjava(,使用松露 API 进行实验(例如org.graalvm.polyglot.Context(, 并略读一些 Graal 编译器源代码,似乎:

  • 松露乐器只能"看到"松露可以解释的代码 语言(例如jsllvm(。
  • 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

仪器只能"看到"可以用 Truffle 语言(例如.js或 llvm(解释的代码。

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

然而,Oracle实验室正在进行中,将Java字节码解释器实现为Truffle语言(代号espresso(,应该很快就会推出。

最新更新