JNI_GetCreatedJavaVMs无法在OS X上运行

时间:2017-09-07 04:44:00

标签: c++ macos jvm java-native-interface

我正在尝试在注入的dylib中使用JNI获取JVM实例。我是mac的新手,并在OS X中查找了JNI的示例和用法,我可以看到它非常相似(如果不相同)。

我有一个方法可以从我注入的JVM中检索创建的JavaVM实例,这就是它被卡住的地方......

bool Payload::GetJNIInstances() {
    jsize nVMs;
    int res = JNI_GetCreatedJavaVMs(NULL, 0, &nVMs); // this line crashes the JVM

    // Doesn't even get to the null/invalid check.
    if (res != JNI_OK || nVMs == 0) {
        printf("Failed to get JVM instance (A)");
        return false;
    }

我注意到该方法在OS X上已弃用,我想知道这是否与它有关。我检查了JNI头文件是否有任何线索,关于我在OS X上如何做到这一点,但大多数方法都被弃用,除了2(JNI_OnLoad和JNI_OnUnload),这对我来说对此任务没有任何用处。

我很困惑的原因是这个方法在Windows上运行正常(调用JNI_GetCreatedJavaVMs),并且我安装的Java版本是相同的(jre130_131)。

在OS X中执行此操作时是否需要我缺少的东西,或者这是在OS X上获取JVM的完全错误的方法?

编辑:我使用JNI_GetCreatedJavaVMs测试了以下args,但是我遇到了同样的崩溃: JavaVM * vm [1],jint 1,jint& nVMs

这是崩溃报告(应该是您需要的报告中的所有信息):

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000010f14c704, pid=776, tid=0x0000000000004f03
#
# JRE version: Java(TM) SE Runtime Environment (8.0_144-b01) (build 1.8.0_144-b01)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C  0x000000010f14c704

有什么想法吗?

感谢您的帮助!

0 个答案:

没有答案