Вопрос Крашит меню

Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Добрый вечер. Все оффсеты обновлены. При вызове крашит. Подскажите пожалуйста, в чем пролема.
меню:
IFFont* pFFont;
CUIDraw* pUIDraw;
bool BeginScene()
{
    if (!pUIDraw) pUIDraw = SSystemGlobalEnvironment::Singleton()->GetIGame()->GetIGameFramework()->m_pUIDraw;
    if (!pFFont) pFFont = SSystemGlobalEnvironment::Singleton()->GetCryFont()->GetFont("warface");
    if (pUIDraw) {
        pUIDraw->PreRender();
        return true;
    }
    return false;
}
void EndScene()
{
    pUIDraw->PostRender();
}
void Rendering() {
    //BeginScene();
    //End();
}
вызов:
HRESULT D3D11Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags) {
    Rendering();
    return hkInterFace->GetOriginalFunction<HRESULT(*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
}
int UpdateHook(int pSystem, int pUodFlag, int nPauseMode) {


    Multihit();

    return hkGame->GetOriginalFunction<int(_stdcall*)(int, int, int)>(10)(pSystem, pUodFlag, nPauseMode);
}



bool DllMain(HMODULE hModule, bool ul_reason_for_call, LPVOID lpReserved)
{
    if (ul_reason_for_call == true)
    {
        hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
        hkGame->HookFunction((void*)UpdateHook, 10);
        hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetIRenderer()->GetIDXGISwapChain());
        hkInterFace->HookFunction((void*)D3D11Present, 8);
    }
    return true;
}
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
Добрый вечер. Все оффсеты обновлены. При вызове крашит. Подскажите пожалуйста, в чем пролема.
меню:
IFFont* pFFont;
CUIDraw* pUIDraw;
bool BeginScene()
{
    if (!pUIDraw) pUIDraw = SSystemGlobalEnvironment::Singleton()->GetIGame()->GetIGameFramework()->m_pUIDraw;
    if (!pFFont) pFFont = SSystemGlobalEnvironment::Singleton()->GetCryFont()->GetFont("warface");
    if (pUIDraw) {
        pUIDraw->PreRender();
        return true;
    }
    return false;
}
void EndScene()
{
    pUIDraw->PostRender();
}
void Rendering() {
    //BeginScene();
    //End();
}
вызов:
HRESULT D3D11Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags) {
    Rendering();
    return hkInterFace->GetOriginalFunction<HRESULT(*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
}
int UpdateHook(int pSystem, int pUodFlag, int nPauseMode) {


    Multihit();

    return hkGame->GetOriginalFunction<int(_stdcall*)(int, int, int)>(10)(pSystem, pUodFlag, nPauseMode);
}



bool DllMain(HMODULE hModule, bool ul_reason_for_call, LPVOID lpReserved)
{
    if (ul_reason_for_call == true)
    {
        hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
        hkGame->HookFunction((void*)UpdateHook, 10);
        hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetIRenderer()->GetIDXGISwapChain());
        hkInterFace->HookFunction((void*)D3D11Present, 8);
    }
    return true;
}
Ты зачем логику в DllMain прописал?..
 
Начинающий
Статус
Оффлайн
Регистрация
6 Июл 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0
а какая разница?
большая, после вызова dll_process_attach, те действия которые ты написал в нём, исполняются в контексте потока который загрузил dll.

в твоей ситуации, нужно создавать отдельный поток который не будет конфликтовать никак с основным потоком приложения в которое была загружена динамическая библиотека, лучше всего это делать с помощью библиотеки "thread" то есть std::thread, ибо при использовании createthread, есть вариант событий когда отдельный поток и поток игры могут столкнуться на опредённом адресе в памяти и ты словишь ub.

а так, твой код просто руинит поток игры, и исполняет исключительно контекстный поток dllmain.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
21 Май 2018
Сообщения
430
Реакции[?]
382
Поинты[?]
3K
нахуй треды мы фанаты init once системы
Зачем тебе тред для инита в интернале? Дабы ебальничком перед античитом посветить? Создавать тред исключительно для проставки хуков бессмысленно. Я еще понимаю случаи когда нужно распараллелить задачи, но не как не для инициализации. Спойлер, анлоаднуться можно сняв хук в том же хуке например, никто не запрещает так делать.
То что делают ксго пастеры, не всегда нужно брать за образец идеальности.
 
Начинающий
Статус
Оффлайн
Регистрация
18 Июл 2017
Сообщения
244
Реакции[?]
12
Поинты[?]
0
Меню мб у тебя крашит из за swapchain не обновленного.
 
Сверху Снизу