Вопрос JNI после присоединения не видит классы

Статус
В этой теме нельзя размещать новые ответы.
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
35
Реакции[?]
1
Поинты[?]
0
Хай. Запустил майн с параметром -verbose, все классы на месте.
Аттачусь к JVM так:

C++:
typedef jint(*pJNI_GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);

void init() {
    JavaVM* jvm;
    HINSTANCE hJvm = GetModuleHandleA("jvm.dll");
    if (hJvm == nullptr) {
        std::cout << "блять";
        return;
    }
    pJNI_GetCreatedJavaVMs JNI_GetCreatedJavaVMs = reinterpret_cast<pJNI_GetCreatedJavaVMs>(GetProcAddress(hJvm, "JNI_GetCreatedJavaVMs"));

    JNI_GetCreatedJavaVMs(&jvm, 1, nullptr);
    jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), NULL);

    std::cout << "hooked into JVM " << (res == JNI_OK ? "ok" : "pizdec") << std::endl;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        {
            AllocConsole();
            freopen("CONOUT$", "w", stdout);
            init();
        }
    }

    return TRUE;
}
Всё верно, пытаюсь получить класс bib (env->FindClass("bib")) (посмотрев в Recaf джарку взял рандомный класс, пекеджа у него нету), а он его не видит. res равен JNI_OK.

Немного почесав свою головку получил класс с помощью loadClass из SystemClassLoader, но всё равно не понимаю почему JNI его в упор не видит.
 
Начинающий
Статус
Оффлайн
Регистрация
10 Сен 2022
Сообщения
12
Реакции[?]
0
Поинты[?]
0
C++:
typedef jint(*pJNI_GetCreatedJavaVMs)(JavaVM** vmBuf, jsize bufLen, jsize* nVMs);
JNIEnv* env;

void init()
{
    JavaVM* jvm;
    pJNI_GetCreatedJavaVMs JNI_GetCreatedJavaVMs = reinterpret_cast<pJNI_GetCreatedJavaVMs>(GetProcAddress(GetModuleHandleA("jvm.dll"), "JNI_GetCreatedJavaVMs"));
    JNI_GetCreatedJavaVMs(&jvm, 1, NULL);
    jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), NULL);
}

BOOL WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        AllocConsole();
        freopen("CONOUT$", "w", stdout);
        init();
        jclass klass = env->FindClass("bib");
        std::cout << klass;
    }
}
попробуй так, всё работает (с аргументом -verbose)
 
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
35
Реакции[?]
1
Поинты[?]
0
C++:
typedef jint(*pJNI_GetCreatedJavaVMs)(JavaVM** vmBuf, jsize bufLen, jsize* nVMs);
JNIEnv* env;

void init()
{
    JavaVM* jvm;
    pJNI_GetCreatedJavaVMs JNI_GetCreatedJavaVMs = reinterpret_cast<pJNI_GetCreatedJavaVMs>(GetProcAddress(GetModuleHandleA("jvm.dll"), "JNI_GetCreatedJavaVMs"));
    JNI_GetCreatedJavaVMs(&jvm, 1, NULL);
    jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), NULL);
}

BOOL WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        AllocConsole();
        freopen("CONOUT$", "w", stdout);
        init();
        jclass klass = env->FindClass("bib");
        std::cout << klass;
    }
}
попробуй так, всё работает (с аргументом -verbose)
а вот у меня нихрена не работает. один чел подсказал получить env с помощью jint res = jvm->GetEnv((void**) &env, JNI_VERSION_1_8), тогда env стал не nullptr, но классы всё равно не видно
C++:
typedef jint(*pJNI_GetCreatedJavaVMs)(JavaVM** vmBuf, jsize bufLen, jsize* nVMs);
JNIEnv* env;

void init()
{
    JavaVM* jvm;
    pJNI_GetCreatedJavaVMs JNI_GetCreatedJavaVMs = reinterpret_cast<pJNI_GetCreatedJavaVMs>(GetProcAddress(GetModuleHandleA("jvm.dll"), "JNI_GetCreatedJavaVMs"));
    JNI_GetCreatedJavaVMs(&jvm, 1, NULL);
    jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), NULL);
}

BOOL WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        AllocConsole();
        freopen("CONOUT$", "w", stdout);
        init();
        jclass klass = env->FindClass("bib");
        std::cout << klass;
    }
}
попробуй так, всё работает (с аргументом -verbose)
1680986079275.png
прям под фулл твой код скопировал если интересно. в recaf класс есть:
1680986099266.png
 
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2021
Сообщения
377
Реакции[?]
78
Поинты[?]
11K
cpp issue + no experience issue, пиши на шарпе, там даже питонист разберётся
 
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
35
Реакции[?]
1
Поинты[?]
0
cpp issue + no experience issue, пиши на шарпе, там даже питонист разберётся
смешно

напиши в дс wcq#7622
написал
cpp issue + no experience issue, пиши на шарпе, там даже питонист разберётся
на шарпе каждый сможет, так не интересно
 
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
35
Реакции[?]
1
Поинты[?]
0
пожалуйста распилите меня болгаркой блять. я такой конченный блять сука. я запускал более новую версию optifine где названия другие. поменял запуск на другую и всё заработало. пиздец
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу