0

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

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

不幸的是,我开始担心制作 Truffle 工具甚至“看到”JVM 字节码是不可能的。从我对 GraalVM 启动器的实验(例如polyglotjava)、对 Truffle API 的实验(例如 org.graalvm.polyglot.Context)以及浏览一些 Graal 编译器源代码来看,似乎:

  • Truffle 工具只能“看到”可由 Truffle 语言(例如jsllvm)解释的代码。
  • 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 字节码。所以请告诉我我错了。

4

1 回答 1

2

Truffle 工具只能“看到”可由 Truffle 语言(例如 js 或 llvm)解释的代码。

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

但是,Oracle 实验室正在将 Java 字节码解释器实现为一种 Truffle 语言(代号 espresso),这方面的工作应该很快就会推出。

于 2020-05-15T07:43:03.883 回答