Вопрос Dll выгружается с модулей

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
11 Июл 2023
Сообщения
7
Реакции
1
Всем привет.
Я решил сделать dll которая включает glowesp на 1.16.5, но при внедрении dll, она у меня загружается в unloaded modules. И похоже это ошибка с маппингами (предположительно). Возможно я неправильно их беру т.к. только недавно начал изучать JNI.

Вот мой код:

C++:
Expand Collapse Copy
Info.h
#pragma once
#include <iostream>
#include <Windows.h>
#include "jni/jni.h"


JNIEnv* env = nullptr;
JavaVM* jVM = nullptr;

void Func();


C++:
Expand Collapse Copy
Soft.cpp 

#include "Info.h"

jclass MineClass = env->FindClass("net/minecraft/client/Minecraft");


jobject getInstance()
{
jmethodID getInstance = env->GetStaticMethodID(MineClass, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
return env->CallStaticObjectMethod(MineClass, getInstance);
}


jobject getPlayer()
{
jfieldID playerField = env->GetFieldID(MineClass, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
return env->GetObjectField(getInstance(), playerField);
}


void setGlow()
{
jclass Entity = env->FindClass("net/minecraft/entity/Entity");
jmethodID Glow = env->GetMethodID(Entity, "func_184195_f", "(Z)V");
env->CallVoidMethod(getPlayer(), Glow, true);
}


void Func()
{
if (!getInstance())
return;
if (!getPlayer())
return;

if (GetAsyncKeyState(VK_RSHIFT))
{
setGlow();
}
}


C++:
Expand Collapse Copy
dllmain.cpp
#include "Info.h"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HMODULE jvmHandle = GetModuleHandleA("jvm.dll");

GetCreatedJavaVMs JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvmHandle, "JNI_GetCreatedJavaVMs");
JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
jVM->AttachCurrentThread((void**)&env, NULL);

Func();

return true;
}
return false;
}


Вот мой код. Я не могу понять в чем причина. Помогите пожалуйста.
 
Всем привет.
Я решил сделать dll которая включает glowesp на 1.16.5, но при внедрении dll, она у меня загружается в unloaded modules. И похоже это ошибка с маппингами (предположительно). Возможно я неправильно их беру т.к. только недавно начал изучать JNI.

Вот мой код:

C++:
Expand Collapse Copy
Info.h
#pragma once
#include <iostream>
#include <Windows.h>
#include "jni/jni.h"


JNIEnv* env = nullptr;
JavaVM* jVM = nullptr;

void Func();


C++:
Expand Collapse Copy
Soft.cpp

#include "Info.h"

jclass MineClass = env->FindClass("net/minecraft/client/Minecraft");


jobject getInstance()
{
jmethodID getInstance = env->GetStaticMethodID(MineClass, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
return env->CallStaticObjectMethod(MineClass, getInstance);
}


jobject getPlayer()
{
jfieldID playerField = env->GetFieldID(MineClass, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
return env->GetObjectField(getInstance(), playerField);
}


void setGlow()
{
jclass Entity = env->FindClass("net/minecraft/entity/Entity");
jmethodID Glow = env->GetMethodID(Entity, "func_184195_f", "(Z)V");
env->CallVoidMethod(getPlayer(), Glow, true);
}


void Func()
{
if (!getInstance())
return;
if (!getPlayer())
return;

if (GetAsyncKeyState(VK_RSHIFT))
{
setGlow();
}
}


C++:
Expand Collapse Copy
dllmain.cpp
#include "Info.h"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HMODULE jvmHandle = GetModuleHandleA("jvm.dll");

GetCreatedJavaVMs JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvmHandle, "JNI_GetCreatedJavaVMs");
JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
jVM->AttachCurrentThread((void**)&env, NULL);

Func();

return true;
}
return false;
}


Вот мой код. Я не могу понять в чем причина. Помогите пожалуйста.
БJl9Tb, создай поток для работы Чита. То что Func(); выполняется 1 раз и дллмейн закрывается тебя не e6eT?
И что за издевательство делать читы на майнкрафт на C++
 
БJl9Tb, создай поток для работы Чита. То что Func(); выполняется 1 раз и дллмейн закрывается тебя не e6eT?
И что за издевательство делать читы на майнкрафт на C++
Я это делаю чтобы понять, как работает JNI в целом
 
Всем привет.
Я решил сделать dll которая включает glowesp на 1.16.5, но при внедрении dll, она у меня загружается в unloaded modules. И похоже это ошибка с маппингами (предположительно). Возможно я неправильно их беру т.к. только недавно начал изучать JNI.

Вот мой код:

C++:
Expand Collapse Copy
Info.h
#pragma once
#include <iostream>
#include <Windows.h>
#include "jni/jni.h"


JNIEnv* env = nullptr;
JavaVM* jVM = nullptr;

void Func();


C++:
Expand Collapse Copy
Soft.cpp

#include "Info.h"

jclass MineClass = env->FindClass("net/minecraft/client/Minecraft");


jobject getInstance()
{
jmethodID getInstance = env->GetStaticMethodID(MineClass, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
return env->CallStaticObjectMethod(MineClass, getInstance);
}


jobject getPlayer()
{
jfieldID playerField = env->GetFieldID(MineClass, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
return env->GetObjectField(getInstance(), playerField);
}


void setGlow()
{
jclass Entity = env->FindClass("net/minecraft/entity/Entity");
jmethodID Glow = env->GetMethodID(Entity, "func_184195_f", "(Z)V");
env->CallVoidMethod(getPlayer(), Glow, true);
}


void Func()
{
if (!getInstance())
return;
if (!getPlayer())
return;

if (GetAsyncKeyState(VK_RSHIFT))
{
setGlow();
}
}


C++:
Expand Collapse Copy
dllmain.cpp
#include "Info.h"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HMODULE jvmHandle = GetModuleHandleA("jvm.dll");

GetCreatedJavaVMs JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvmHandle, "JNI_GetCreatedJavaVMs");
JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
jVM->AttachCurrentThread((void**)&env, NULL);

Func();

return true;
}
return false;
}


Вот мой код. Я не могу понять в чем причина. Помогите пожалуйста.
учи MINECRAFT API C+, пастер.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет.
Я решил сделать dll которая включает glowesp на 1.16.5, но при внедрении dll, она у меня загружается в unloaded modules. И похоже это ошибка с маппингами (предположительно). Возможно я неправильно их беру т.к. только недавно начал изучать JNI.

Вот мой код:

C++:
Expand Collapse Copy
Info.h
#pragma once
#include <iostream>
#include <Windows.h>
#include "jni/jni.h"


JNIEnv* env = nullptr;
JavaVM* jVM = nullptr;

void Func();


C++:
Expand Collapse Copy
Soft.cpp

#include "Info.h"

jclass MineClass = env->FindClass("net/minecraft/client/Minecraft");


jobject getInstance()
{
jmethodID getInstance = env->GetStaticMethodID(MineClass, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
return env->CallStaticObjectMethod(MineClass, getInstance);
}


jobject getPlayer()
{
jfieldID playerField = env->GetFieldID(MineClass, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
return env->GetObjectField(getInstance(), playerField);
}


void setGlow()
{
jclass Entity = env->FindClass("net/minecraft/entity/Entity");
jmethodID Glow = env->GetMethodID(Entity, "func_184195_f", "(Z)V");
env->CallVoidMethod(getPlayer(), Glow, true);
}


void Func()
{
if (!getInstance())
return;
if (!getPlayer())
return;

if (GetAsyncKeyState(VK_RSHIFT))
{
setGlow();
}
}


C++:
Expand Collapse Copy
dllmain.cpp
#include "Info.h"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HMODULE jvmHandle = GetModuleHandleA("jvm.dll");

GetCreatedJavaVMs JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvmHandle, "JNI_GetCreatedJavaVMs");
JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
jVM->AttachCurrentThread((void**)&env, NULL);

Func();

return true;
}
return false;
}


Вот мой код. Я не могу понять в чем причина. Помогите пожалуйста.
Вместо "Func();" сделай так: CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(Func), 0, nullptr); (я ща не дома и сижу в метро, поэтому код может быть с ошибкой , но сам пофиксишь)
 
Вместо "Func();" сделай так: CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(Func), 0, nullptr); (я ща не дома и сижу в метро, поэтому код может быть с ошибкой , но сам пофиксишь)
возможно. мне кажется. что проблема еще в вызовах методов и полей. но я перепроверял и переделывал много раз. но получаю один результат. может ты что-то видишь?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
возможно. мне кажется. что проблема еще в вызовах методов и полей. но я перепроверял и переделывал много раз. но получаю один результат. может ты что-то видишь?
Ты не создал поток на функции, ты просто ее вызвал 1 раз в дллмейне и все. Всегда , абсолютно всегда надо создавать поток через функцию CreateThread (в некоторых случаях люди юзают CreateRemoteThread / SetNextWindow....)
возможно. мне кажется. что проблема еще в вызовах методов и полей. но я перепроверял и переделывал много раз. но получаю один результат. может ты что-то видишь?
Просто вместо вызова функции впасть строчку которую я тебе написал выше, в том сообщении

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
info.hpp:
Expand Collapse Copy
#include <iostream>
#include <windows.h>

#include "jni/jni.h"

namespace jni_main
{
    inline JNIEnv* env = nullptr;
    inline JavaVM* jVM = nullptr;

    auto initialize() -> bool;
}
info.cpp:
Expand Collapse Copy
#include "info.hpp"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);

namespace jni_main
{
    auto initialize() -> bool
    {
        auto jvm = GetModuleHandleW(L"jvm.dll");
        if(!jvm)
            return false;

        auto JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvm, "JNI_GetCreatedJavaVMs");
        if(!JNI_GetCreatedJavaVMs)
            return false;
            
        JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
        jVM->AttachCurrentThread((void**)&env, NULL);
        
        return true;
    }
}
software.hpp:
Expand Collapse Copy
#include <iostream>
#include <windows.h>

#include <jni/jni.h>

using namespace std;

namespace software
{   
    inline jclass minecraft_class = nullptr;
    
    auto get_instance() -> jobject;
    auto get_player() -> jobject;
    
    auto set_glow(bool value = true) -> void;
    auto initialize() -> void;
}
software.cpp:
Expand Collapse Copy
#include "software.hpp"
#include "info.hpp"

namespace software
{
    auto get_instance() -> jobject
    {
        jmethodID instance = jni_main::env->GetStaticMethodID(minecraft_class, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
        return jni_main::env->CallStaticObjectMethod(minecraft_class, instance);
    }

    auto get_player() -> jobject
    {
        jfieldID player = jni_main::env->GetFieldID(minecraft_class, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
        return jni_main::env->GetObjectField(get_instance(), player);
    }
    
    auto set_glow(bool value) -> void
    {
        jclass entity = jni_main::env->FindClass("net/minecraft/entity/Entity");
        jmethodID set_glowing = jni_main::env->GetMethodID(entity, "func_184195_f", "(Z)V");
        jni_main::env->CallVoidMethod(get_player(), set_glowing, value);
    }

    auto initialize() -> void
    {
        if(!jni_main::initialize())
            return;
            
        if(!get_instance())
            return;
        
        if(!get_player())
            return;
           
        while(1)
        {
            if (GetAsyncKeyState(VK_RSHIFT) & 1)
                set_glow();
        }
    }
}
dllmain.cpp:
Expand Collapse Copy
#include "info.hpp"
#include "software.hpp"

auto DllMain(void*, unsigned __int32 call_reason, void*) -> bool
{
    if(call_reason != 1)
        return false;
        
    CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(software::initialize), 0, 0, 0);
    return true;
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
info.hpp:
Expand Collapse Copy
#include <iostream>
#include <windows.h>

#include "jni/jni.h"

namespace jni_main
{
    inline JNIEnv* env = nullptr;
    inline JavaVM* jVM = nullptr;

    auto initialize() -> bool;
}
info.cpp:
Expand Collapse Copy
#include "info.hpp"

typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);

namespace jni_main
{
    auto initialize() -> bool
    {
        auto jvm = GetModuleHandleW(L"jvm.dll");
        if(!jvm)
            return false;

        auto JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvm, "JNI_GetCreatedJavaVMs");
        if(!JNI_GetCreatedJavaVMs)
            return false;
           
        JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
        jVM->AttachCurrentThread((void**)&env, NULL);
       
        return true;
    }
}
software.hpp:
Expand Collapse Copy
#include <iostream>
#include <windows.h>

#include <jni/jni.h>

using namespace std;

namespace software
{  
    inline jclass minecraft_class = nullptr;
   
    auto get_instance() -> jobject;
    auto get_player() -> jobject;
   
    auto set_glow(bool value = true) -> void;
    auto initialize() -> void;
}
software.cpp:
Expand Collapse Copy
#include "software.hpp"
#include "info.hpp"

namespace software
{
    auto get_instance() -> jobject
    {
        jmethodID instance = jni_main::env->GetStaticMethodID(minecraft_class, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
        return jni_main::env->CallStaticObjectMethod(minecraft_class, instance);
    }

    auto get_player() -> jobject
    {
        jfieldID player = jni_main::env->GetFieldID(minecraft_class, "field_71439_g", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
        return jni_main::env->GetObjectField(get_instance(), player);
    }
   
    auto set_glow(bool value) -> void
    {
        jclass entity = jni_main::env->FindClass("net/minecraft/entity/Entity");
        jmethodID set_glowing = jni_main::env->GetMethodID(entity, "func_184195_f", "(Z)V");
        jni_main::env->CallVoidMethod(get_player(), set_glowing, value);
    }

    auto initialize() -> void
    {
        if(!jni_main::initialize())
            return;
           
        if(!get_instance())
            return;
       
        if(!get_player())
            return;
          
        while(1)
        {
            if (GetAsyncKeyState(VK_RSHIFT) & 1)
                set_glow();
        }
    }
}
dllmain.cpp:
Expand Collapse Copy
#include "info.hpp"
#include "software.hpp"

auto DllMain(void*, unsigned __int32 call_reason, void*) -> bool
{
    if(call_reason != 1)
        return false;
       
    CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(software::initialize), 0, 0, 0);
    return true;
}
Многоуважаемый сударь, вы бы могли не утруждаться ради этой хуйни и не проводить рефакторинг всего проекта....................
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Многоуважаемый сударь, вы бы могли не утруждаться ради этой хуйни и не проводить рефакторинг всего проекта....................
Сударь, вы не вежливы, я предоставил, рабочее и понятное ( как по мне ) решение
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сударь, мне похуй, сосите хуйца
Сударь, вальните ебало и я жду видео демонстрацию на которой отчётливо слышно звук выхлопа машины "Volvo-57" на видео-пленку и звуковую дорожку, далее отправьте мне в прекрасный месанджер "Telegram", который был создан человеком -> "Павел Дуров"
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
потому что он помогает пастеру, а ты не помогаешь
вот в чем разница....
Я это не делаю ради игры с этим софтом. я хочу научиться понять как работает JNI. поэтому приходится пастить. но когда придет время буду делать стараться все больше и больше от себя. и еще. они оба помогли мне и я им очень благодарен за ответы.
 
Последнее редактирование:
Назад
Сверху Снизу