小编maj*_*opa的帖子

如何使用 JNI 从已运行的 JVM 获取 JavaVM 或 JNIEnv?

我正在做一个涉及 Rust 和 Java 的项目。我需要能够从 Rust 端使用 JNI,而无需 Java 端调用它(因为它不是我的代码)。到目前为止,我已经能够确保我的 DLL 被注入(在按键上打开一个小窗口,我一直在使用它进行调试)。

相关代码的简短示例如下:

use jni::sys::{JNI_GetCreatedJavaVMs, JNIInvokeInterface_};


let jvm_ptr = null_mut() as *mut *mut *const JNIInvokeInterface_;
let count = null_mut();

// hasn't crashed

JNI_GetCreatedJavaVMs(jvm_ptr, 1, count);  // https://docs.rs/jni/latest/jni/sys/fn.JNI_GetCreatedJavaVMs.html

// crashes
Run Code Online (Sandbox Code Playgroud)

我的问题是:在这种情况下是否有可能/如何获得 JNI 环境?

java-native-interface ffi dll-injection rust jnienv

5
推荐指数
1
解决办法
857
查看次数

标签 统计

dll-injection ×1

ffi ×1

java-native-interface ×1

jnienv ×1

rust ×1