C++ Вопрос Кривой инжект

На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,025
Реакции[?]
181
Поинты[?]
70K
В чем может быть проблема, инжекчу с такой точкой входа
Отрисовывается на один фрейм меню (кстати успеваю увидеть что фреймрейт в меню на этот момент 13к+ ), и после просто пропадает).

C++:
bool DllMain( HINSTANCE hDll, unsigned long long dDll, void* )
{
    switch ( dDll )
    {
    case 1:
        MH_Initialize( );
        MainThread( nullptr );
        break;
    }
    return true;
}
Как будто цикл один раз проходится по всему коду
И попытки с двухсотой оно инжектится)
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,025
Реакции[?]
181
Поинты[?]
70K
Пользователь
Статус
Оффлайн
Регистрация
28 Фев 2021
Сообщения
591
Реакции[?]
118
Поинты[?]
0
Данная точка входа DllMain является частью динамической библиотеки (DLL), которая может быть загружена в другой процесс, в котором выполняется код. При загрузке DLL-библиотеки, операционная система вызывает DllMain, чтобы выполнить определенные инициализационные задачи.

Судя по коду, вы используете библиотеку "MinHook" для перехвата функций в процессе. Ваше приложение загружает библиотеку и инициализирует ее в DllMain с помощью функции MH_Initialize(). Затем вызывается функция MainThread, которая вероятно содержит код для перехвата функций.

Проблема может заключаться в том, что после инициализации MainThread завершается и основной поток, в котором выполняется код, завершается вместе с ней. Если это происходит слишком быстро, то перехват функций может быть удален до того, как он был успешно установлен. Это может объяснить почему ваше меню появляется на короткое время, а затем исчезает.

Одним из решений этой проблемы может быть добавление бесконечного цикла в MainThread, чтобы ваша функция не завершалась до тех пор, пока DLL не будет выгружена. Например:

C++:
void MainThread(void* hModule)

{

    // Your hooking code here



    // Add an infinite loop to prevent the thread from exiting

    while (true)

    {

        Sleep(1000);

    }

}
Если это не помогает, то вы можете использовать отладчик, чтобы проверить, что происходит после загрузки вашей DLL-библиотеки. Важно убедиться, что вы перехватываете правильные функции и ваш код не вызывает ошибки, которые могут привести к выгрузке DLL.


учимся пользоваться chatgpt вместе с yougay
 
Сверху Снизу