注入后未调用DllMain

问题描述 投票:0回答:1

我有一个与 JNI 交互的工作代码。当我注入 DLL 时,一切正常。我决定改进我的程序并使用 ImGui 和 MinHook 添加 GUI。此后,DllMain 不再被调用。项目中的 *.lib 文件对此有影响吗?在项目配置中,我仅更改了添加的库的目录。根据记录,我尝试使用 Visual Studio 进行调试,但所有断点均不起作用。

#include <cstdio>
#include <Windows.h>
#include <WinUser.h>
//#include "Core/Patching.h"

#include "Cheat.h"
#include "Java.h"

void MainThread(HMODULE module)
{
    createEnv();

    if (getEnv() != nullptr) {
        //Patching::ApplyPatches();

        while (true)
        {
            if (GetAsyncKeyState(VK_END)) break;

            //runModules();

            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
    }
    
    printf("DETACHED!!!\n");
    FreeLibraryAndExitThread(module, 0);
}

extern "C" bool __stdcall DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
    static FILE* p_file{ nullptr };
    static std::thread main_thread;

    if (reason == DLL_PROCESS_ATTACH)
    {
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MainThread, NULL, NULL, NULL);
    }
    else if (reason == DLL_PROCESS_DETACH)
    {
    }

    return true;
}
#include "Java.h"

JNIEnv* env;

void createEnv() {
    if (env == nullptr) {
        JavaVM* p_jvm{ nullptr };
        jint result = JNI_GetCreatedJavaVMs(&p_jvm, 1, nullptr);

        JNIEnv* p_env{ nullptr }; // JNI interface pointer
        p_jvm->AttachCurrentThread((void**)&env, nullptr);

        if (env == nullptr)
            printf("Creating JavaEnv failed\n");
    }

    printf("Successfully created JavaEnv\n");
}
c++ java-native-interface glfw dll-injection
1个回答
0
投票

我修正了错误。事实上,MinHook 项目生成了两个版本的 .lib 文件。其中一个是为了让人上瘾而设计的,而另一个则不是。我把它们搞混了。导入必要的库后,一切就位了。正确的文件具有前缀“lib”,结果名称是“libMinHook.x64.lib”

© www.soinside.com 2019 - 2024. All rights reserved.