是否可以从本机代码挂钩 Java 函数(入口结束出口)?

问题描述 投票:0回答:0

我正在尝试用 C++ 编写一个 Java 代理,以在本机级别启用 Java 代码的挂钩,并满足以下要求:

  1. 尽量不引入任何额外需要加载的Java代码,只通过native层实现hook;
  2. 尽可能没有性能损失;
  3. 可以监控任意函数的进入和退出。

我目前在任何网站上都没有找到满足上述要求的技术。

附加背景: 我正在尝试在本机层开发一个 Minecraft Mod Loader ... 一种技术验证项目。我也很好奇以前是否有人这样做过。

我首先尝试了 JVMTI SetEventCallbacks(),但这导致 JVM 进入极其缓慢的解释运行状态。

目前还有几个想法,但限于我的能力暂时不能全部实现(希望大家指教):

  1. 代理启动时转换类;
  2. 分析JIT后生成的机器码,并在其中实现一个hook(貌似很难)
java c++ jvm minecraft jvm-hotspot
© www.soinside.com 2019 - 2024. All rights reserved.