, когда я пытаюсь внедрить DLL с кодом JNI, мой существующий сбой JVM (minecraft). Я получил эту ошибку при попытке использовать функцию JNI. Когда я удалил этот вызов, JVM не обрабатывает код sh.
Cra sh (из прилагаемого отладчика Visual Studio):
Unhandled exception at 0x00000000352B10CB in javaw.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
Мой код DLL:
#include "pch.h"
#include "jni.h"
#include <iostream>
JavaVM* jvm;
JNIEnv* env;
HANDLE jvmHandle;
FARPROC func_JNI_GetCreatedJavaVMs;
JavaVMInitArgs vm_args;
void init() {
AllocConsole();
freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
std::cout << "This works" << std::endl;
typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
GetCreatedJavaVMs jni_GetCreatedJavaVMs;
jni_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(GetModuleHandle(
TEXT("jvm.dll")), "JNI_GetCreatedJavaVMs");
std::cout << "CreatedJavaVMs: "<<jni_GetCreatedJavaVMs << std::endl;
std::cout << "JVM load succeeded: Version ";
jint ver = env->GetVersion(); //Removing this removes crashes too.
std::cout << ((ver >> 16) & 0x0f) << "." << (ver & 0x0f) << std::endl;
//if (getEnvStat == JNI_EDETACHED)
//{
// vm->AttachCurrentThread((void**)&env, NULL);
// }
/*if (env != nullptr)
{
//start
}
if (env->ExceptionCheck())
{
env->ExceptionDescribe();
}
vm->DetachCurrentThread();*/
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
init();
return TRUE;
}