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

  • Автор темы Автор темы Yesgoter
  • Дата начала Дата начала
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,001
Реакции
86
Добрый вечер. Все оффсеты обновлены. При вызове крашит. Подскажите пожалуйста, в чем пролема.
меню:
Expand Collapse Copy
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();
}
вызов:
Expand Collapse Copy
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;
}
 
Добрый вечер. Все оффсеты обновлены. При вызове крашит. Подскажите пожалуйста, в чем пролема.
меню:
Expand Collapse Copy
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();
}
вызов:
Expand Collapse Copy
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 прописал?..
 
а какая разница?
большая, после вызова dll_process_attach, те действия которые ты написал в нём, исполняются в контексте потока который загрузил dll.

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

а так, твой код просто руинит поток игры, и исполняет исключительно контекстный поток dllmain.
 
Последнее редактирование:
нахуй треды мы фанаты init once системы
Зачем тебе тред для инита в интернале? Дабы ебальничком перед античитом посветить? Создавать тред исключительно для проставки хуков бессмысленно. Я еще понимаю случаи когда нужно распараллелить задачи, но не как не для инициализации. Спойлер, анлоаднуться можно сняв хук в том же хуке например, никто не запрещает так делать.
То что делают ксго пастеры, не всегда нужно брать за образец идеальности.
 
Меню мб у тебя крашит из за swapchain не обновленного.
2023-07-09_00-01-32.png
 
Назад
Сверху Снизу