Вопрос Крашит при заходе в матч( меню)

Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Добрый вечер! В лобби имгуй меню не крашит. Как только запускаюсь в катку, сразу ловлю краш. В чем может быть дело?
C++:
    IRenderer* pRenderer = SSystemGlobalEnvironment::Singleton()->GetRenderer();
    if (!pRenderer) return false;

    if (!Fun.Render.CreateDevice) {
        if (SUCCEEDED(pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&pRenderer->m_pd3dDevice))) {
            pRenderer->m_pd3dDevice->GetImmediateContext(&pRenderer->m_pd3dDeviceContext);
            DXGI_SWAP_CHAIN_DESC sd;
            pSwapChain->GetDesc(&sd);
            pRenderer->m_hWnd = sd.OutputWindow;
            ID3D11Texture2D* pBackBuffer;
            pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
            pRenderer->m_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &pRenderer->m_pBackBuffer);
            pBackBuffer->Release();
            oWndProc = (WNDPROC)SetWindowLongPtr(pRenderer->m_hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc);
            InitImGui(pRenderer);
            Fun.Render.CreateDevice = true;
        }

        else return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
    }
    auto flags =  ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize;

    ImGui_ImplDX11_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

    if ((GetAsyncKeyState(VK_HOME) & 1) || (GetAsyncKeyState(VK_END) & 1) || (GetAsyncKeyState(VK_INSERT) & 1)) Fun.Render.DrawMenu = !Fun.Render.DrawMenu;
    if (Fun.Render.DrawMenu) {

        ImGui::Begin("Softs", nullptr, flags); {
            ImGui::SetWindowSize({ 341.f, 274.f });
            ImGui::SetCursorPos( { 15.f, 35.f } );
            if ( ImGui::Button ("AimBot", ImVec2(70.f, 30.f ) ) )
            {
                tab_ = 1;
            }
            ImGui::SetCursorPos ( { 95.f, 35.f } );
            if ( ImGui::Button ( "Visuals" , ImVec2(70.f, 30.f)) )
            {           
                tab_ = 2;
            }
            ImGui::SetCursorPos ( { 175.f, 35.f } );

            if ( ImGui::Button ( "Weapon" , ImVec2(70.f, 30.f)) )
            {
                tab_ = 3;
            }
            ImGui::SetCursorPos ( { 255.f, 35.f } );

            if ( ImGui::Button ( "Colors", ImVec2(70.f, 30.f)) ) {
                tab_ = 4;
            }

            
        }

        ImGui::End();
    }



    if (pFunction.Fov) {
        int m_width = ImGui::GetIO().DisplaySize.x;
        int m_height = ImGui::GetIO().DisplaySize.y;
        ImGui::GetOverlayDrawList()->AddCircle(ImVec2(m_width / 2, m_height / 2), pFunction.fov_act2 * 4, ImColor(circle_color[0], circle_color[1], circle_color[2], circle_color[3]), 100, 1.f);
    }
    ImGui::Render();

    pRenderer->m_pd3dDeviceContext->OMSetRenderTargets(1, &pRenderer->m_pBackBuffer, NULL);
    ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());

    return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
}
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
144
Реакции[?]
26
Поинты[?]
26K
А при чем тут они? У меня ни одного вызова игровой функции. Онли отрисовка меню.
упс. тогда используй хук Дх, а не игровой девайс.
При заходе на катку, указатель на игровой девайс теряется, а ты в этот момент пытаешься выжать из него некую функцию, которая и приводит к крашу. Так что, или проверки ставь на девайс или хукай Дх.
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
упс. тогда используй хук Дх, а не игровой девайс.
При заходе на катку, указатель на игровой девайс теряется, а ты в этот момент пытаешься выжать из него некую функцию, которая и приводит к крашу. Так что, или проверки ставь на девайс или хукай Дх.
какие проверки? Приведи пожалуйста пример в виде кода
 
Начинающий
Статус
Оффлайн
Регистрация
4 Май 2023
Сообщения
14
Реакции[?]
4
Поинты[?]
4K
какие проверки? Приведи пожалуйста пример в виде кода
Он сам не понимает что он пишет. Это не проблема, проблема в том что ты кидаешь не полный код. Откуда мне знать что у тебя находится в функции "InitImGui"?
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Он сам не понимает что он пишет. Это не проблема, проблема в том что ты кидаешь не полный код. Откуда мне знать что у тебя находится в функции "InitImGui"?
C++:
#pragma once
#include "Function.h"
#include <WinUser.h>
#include <wtypes.h>
#include "Classes.h"
#include "xorstr.h"
#include "IMath.h"
#include <d3d11.h>
#include <D3DX11.h>
#include "Silent.h"
#include "Player_Info.h"
#include "Visual.h"
#include "Miscc.h"
#include "WakkHack.h"
#include "Vector.h"
#pragma comment (lib, "d3dx11.lib")
EnableFunction pFunction;
bool menu = false;


ImFont* bold;

ImFont* combo_arrow;
typedef LRESULT(CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
WNDPROC oWndProc;
int tab_ = 0;
//extern "C" __declspec(dllexport) int NextHook(int code, WPARAM wParam, LPARAM lParam) {
//    return CallNextHookEx(NULL, code, wParam, lParam);
//}

void InitImGui(IRenderer* Render)
{
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    if (bold == nullptr) {
        bold = io.Fonts->AddFontFromMemoryTTF(PTRootUIBold1, sizeof(PTRootUIBold1), 15.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    }
    
    if (combo_arrow == nullptr) {
        combo_arrow = io.Fonts->AddFontFromMemoryTTF(combo1, sizeof(combo1), 9.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    }

    ImGui_ImplWin32_Init(Render->m_hWnd);
    ImGui_ImplDX11_Init(Render->m_pd3dDevice, Render->m_pd3dDeviceContext);
    ImGui_Styles();

}

LRESULT WINAPI WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

    if (true && ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam))
        return true;

    return CallWindowProc(oWndProc, hWnd, uMsg, wParam, lParam);
}
bool nule = false;
float circle_color[] = { 255, 255, 255, 255 };

namespace Button {
    bool AimBot, Visual, Weapon, Misc = false;
}
HRESULT WINAPI D3D11Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags)
{

    IRenderer* pRenderer = SSystemGlobalEnvironment::Singleton()->GetRenderer();
    if (!pRenderer) return false;

    if (!Fun.Render.CreateDevice) {
        if (SUCCEEDED(pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&pRenderer->m_pd3dDevice))) {
            pRenderer->m_pd3dDevice->GetImmediateContext(&pRenderer->m_pd3dDeviceContext);
            DXGI_SWAP_CHAIN_DESC sd;
            pSwapChain->GetDesc(&sd);
            pRenderer->m_hWnd = sd.OutputWindow;
            ID3D11Texture2D* pBackBuffer;
            pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
            pRenderer->m_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &pRenderer->m_pBackBuffer);
            pBackBuffer->Release();
            oWndProc = (WNDPROC)SetWindowLongPtr(pRenderer->m_hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc);
            InitImGui(pRenderer);
            Fun.Render.CreateDevice = true;
        }

        else return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
    }
    auto flags =  ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize;

    ImGui_ImplDX11_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

    if ((GetAsyncKeyState(VK_HOME) & 1) || (GetAsyncKeyState(VK_END) & 1) || (GetAsyncKeyState(VK_INSERT) & 1)) Fun.Render.DrawMenu = !Fun.Render.DrawMenu;
    if (Fun.Render.DrawMenu) {

        ImGui::Begin("Unise | Unise.cc", nullptr, flags); {
            ImGui::SetWindowSize({ 341.f, 274.f });
            ImGui::SetCursorPos( { 15.f, 35.f } );
            if ( ImGui::Button ("AimBot", ImVec2(70.f, 30.f ) ) )
            {
                tab_ = 1;
            }
            ImGui::SetCursorPos ( { 95.f, 35.f } );
            if ( ImGui::Button ( "Visuals" , ImVec2(70.f, 30.f)) )
            {           
                tab_ = 2;
            }
            ImGui::SetCursorPos ( { 175.f, 35.f } );

            if ( ImGui::Button ( "Weapon" , ImVec2(70.f, 30.f)) )
            {
                tab_ = 3;
            }
            ImGui::SetCursorPos ( { 255.f, 35.f } );

            if ( ImGui::Button ( "Colors", ImVec2(70.f, 30.f)) ) {
                tab_ = 4;
            }
        }

        ImGui::End();
    }



    if (pFunction.Fov) {
        int m_width = ImGui::GetIO().DisplaySize.x;
        int m_height = ImGui::GetIO().DisplaySize.y;
        ImGui::GetOverlayDrawList()->AddCircle(ImVec2(m_width / 2, m_height / 2), pFunction.fov_act2 * 4, ImColor(circle_color[0], circle_color[1], circle_color[2], circle_color[3]), 100, 1.f);
    }
    ImGui::Render();

    pRenderer->m_pd3dDeviceContext->OMSetRenderTargets(1, &pRenderer->m_pBackBuffer, NULL);
    ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());

    return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
}

bool WINAPI Update(ISystem* pSyspem, ESystemUpdateFlags pUodFlag, int nPauseMode) {



    return hkGame->GetOriginalFunction<bool(WINAPI*)(ISystem*, ESystemUpdateFlags, int)>(4)(pSyspem, pUodFlag, nPauseMode);
}
int DllMain(void* HinstDll, int fdwReason, void* lpvReserved) {

    if (fdwReason == 1) {
        hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
        hkGame->HookFunction((void*)Update, 4);

        hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetRenderer()->GetIDXGISwapChain());
        hkInterFace->HookFunction((void*)D3D11Present, 8);
    }
    //else if (fdwReason == 0) {
    //    hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetRenderer()->GetIDXGISwapChain());
    //    hkInterFace->UnhookFunctionn(8);

    //    hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
    //    hkGame->UnhookFunctionn(4);
    //}
    return true;

}
Иногда может запуститься в катку нормально, но потом крашнуть, на середине катки например. Проблема НЕ с функциями! Их я не вызываю.
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
144
Реакции[?]
26
Поинты[?]
26K
C++:
#pragma once
#include "Function.h"
#include <WinUser.h>
#include <wtypes.h>
#include "Classes.h"
#include "xorstr.h"
#include "IMath.h"
#include <d3d11.h>
#include <D3DX11.h>
#include "Silent.h"
#include "Player_Info.h"
#include "Visual.h"
#include "Miscc.h"
#include "WakkHack.h"
#include "Vector.h"
#pragma comment (lib, "d3dx11.lib")
EnableFunction pFunction;
bool menu = false;


ImFont* bold;

ImFont* combo_arrow;
typedef LRESULT(CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
WNDPROC oWndProc;
int tab_ = 0;
//extern "C" __declspec(dllexport) int NextHook(int code, WPARAM wParam, LPARAM lParam) {
//    return CallNextHookEx(NULL, code, wParam, lParam);
//}

void InitImGui(IRenderer* Render)
{
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    if (bold == nullptr) {
        bold = io.Fonts->AddFontFromMemoryTTF(PTRootUIBold1, sizeof(PTRootUIBold1), 15.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    }
   
    if (combo_arrow == nullptr) {
        combo_arrow = io.Fonts->AddFontFromMemoryTTF(combo1, sizeof(combo1), 9.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    }

    ImGui_ImplWin32_Init(Render->m_hWnd);
    ImGui_ImplDX11_Init(Render->m_pd3dDevice, Render->m_pd3dDeviceContext);
    ImGui_Styles();

}

LRESULT WINAPI WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

    if (true && ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam))
        return true;

    return CallWindowProc(oWndProc, hWnd, uMsg, wParam, lParam);
}
bool nule = false;
float circle_color[] = { 255, 255, 255, 255 };

namespace Button {
    bool AimBot, Visual, Weapon, Misc = false;
}
HRESULT WINAPI D3D11Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags)
{

    IRenderer* pRenderer = SSystemGlobalEnvironment::Singleton()->GetRenderer();
    if (!pRenderer) return false;

    if (!Fun.Render.CreateDevice) {
        if (SUCCEEDED(pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&pRenderer->m_pd3dDevice))) {
            pRenderer->m_pd3dDevice->GetImmediateContext(&pRenderer->m_pd3dDeviceContext);
            DXGI_SWAP_CHAIN_DESC sd;
            pSwapChain->GetDesc(&sd);
            pRenderer->m_hWnd = sd.OutputWindow;
            ID3D11Texture2D* pBackBuffer;
            pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
            pRenderer->m_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &pRenderer->m_pBackBuffer);
            pBackBuffer->Release();
            oWndProc = (WNDPROC)SetWindowLongPtr(pRenderer->m_hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc);
            InitImGui(pRenderer);
            Fun.Render.CreateDevice = true;
        }

        else return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
    }
    auto flags =  ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize;

    ImGui_ImplDX11_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

    if ((GetAsyncKeyState(VK_HOME) & 1) || (GetAsyncKeyState(VK_END) & 1) || (GetAsyncKeyState(VK_INSERT) & 1)) Fun.Render.DrawMenu = !Fun.Render.DrawMenu;
    if (Fun.Render.DrawMenu) {

        ImGui::Begin("Unise | Unise.cc", nullptr, flags); {
            ImGui::SetWindowSize({ 341.f, 274.f });
            ImGui::SetCursorPos( { 15.f, 35.f } );
            if ( ImGui::Button ("AimBot", ImVec2(70.f, 30.f ) ) )
            {
                tab_ = 1;
            }
            ImGui::SetCursorPos ( { 95.f, 35.f } );
            if ( ImGui::Button ( "Visuals" , ImVec2(70.f, 30.f)) )
            {          
                tab_ = 2;
            }
            ImGui::SetCursorPos ( { 175.f, 35.f } );

            if ( ImGui::Button ( "Weapon" , ImVec2(70.f, 30.f)) )
            {
                tab_ = 3;
            }
            ImGui::SetCursorPos ( { 255.f, 35.f } );

            if ( ImGui::Button ( "Colors", ImVec2(70.f, 30.f)) ) {
                tab_ = 4;
            }
        }

        ImGui::End();
    }



    if (pFunction.Fov) {
        int m_width = ImGui::GetIO().DisplaySize.x;
        int m_height = ImGui::GetIO().DisplaySize.y;
        ImGui::GetOverlayDrawList()->AddCircle(ImVec2(m_width / 2, m_height / 2), pFunction.fov_act2 * 4, ImColor(circle_color[0], circle_color[1], circle_color[2], circle_color[3]), 100, 1.f);
    }
    ImGui::Render();

    pRenderer->m_pd3dDeviceContext->OMSetRenderTargets(1, &pRenderer->m_pBackBuffer, NULL);
    ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());

    return hkInterFace->GetOriginalFunction<HRESULT(WINAPI*)(IDXGISwapChain*, UINT, UINT)>(8)(pSwapChain, SyncInterval, Flags);
}

bool WINAPI Update(ISystem* pSyspem, ESystemUpdateFlags pUodFlag, int nPauseMode) {



    return hkGame->GetOriginalFunction<bool(WINAPI*)(ISystem*, ESystemUpdateFlags, int)>(4)(pSyspem, pUodFlag, nPauseMode);
}
int DllMain(void* HinstDll, int fdwReason, void* lpvReserved) {

    if (fdwReason == 1) {
        hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
        hkGame->HookFunction((void*)Update, 4);

        hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetRenderer()->GetIDXGISwapChain());
        hkInterFace->HookFunction((void*)D3D11Present, 8);
    }
    //else if (fdwReason == 0) {
    //    hkInterFace = new IInterfaceHooked((void*)SSystemGlobalEnvironment::Singleton()->GetRenderer()->GetIDXGISwapChain());
    //    hkInterFace->UnhookFunctionn(8);

    //    hkGame = new IGameHooked((void*)SSystemGlobalEnvironment::Singleton()->GetISystem());
    //    hkGame->UnhookFunctionn(4);
    //}
    return true;

}
Иногда может запуститься в катку нормально, но потом крашнуть, на середине катки например. Проблема НЕ с функциями! Их я не вызываю.
Пока ты не укажешь на локальную проблему, тебе не особо помогут.
1. Что крашит, хук или имгуи?
2. Если имгуи не крашит при инициализации и полностью отрисовалось, значит проблема в хуке.
3. Для теста используй хук Дх, что-бы отсеять 2 пункт.
4. И хватит хукать GetISystem, есть другие варианты. Они тут где-то есть.
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Пока ты не укажешь на локальную проблему, тебе не особо помогут.
1. Что крашит, хук или имгуи?
2. Если имгуи не крашит при инициализации и полностью отрисовалось, значит проблема в хуке.
3. Для теста используй хук Дх, что-бы отсеять 2 пункт.
4. И хватит хукать GetISystem, есть другие варианты. Они тут где-то есть.
имгуй крашит\
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
144
Реакции[?]
26
Поинты[?]
26K
Так уже определись
" В лобби имгуй меню не крашит. Как только запускаюсь в катку, сразу ловлю краш. "
Делай уже свою "отладку", иначе тебе не помогут.
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Так уже определись
" В лобби имгуй меню не крашит. Как только запускаюсь в катку, сразу ловлю краш. "
Делай уже свою "отладку", иначе тебе не помогут.
так вф не дает себя продебажить
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
144
Реакции[?]
26
Поинты[?]
26K
так вф не дает себя продебажить
А это не зачем. На своем проекте поставь бряки "мэсаджбоксы"Ю, в итоге поймешь где и что крашит.

Или заведи консоль и в нее выводи свои данные.
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
А это не зачем. На своем проекте поставь бряки "мэсаджбоксы"Ю, в итоге поймешь где и что крашит.

Или заведи консоль и в нее выводи свои данные.
дай тг, спишемся
 
Пользователь
Статус
Оффлайн
Регистрация
21 Окт 2019
Сообщения
346
Реакции[?]
48
Поинты[?]
15K
А ты уверен что m_pd3dDevice, m_pd3dDeviceContext, m_pBackBuffer которые ты берешь из игры актуальны?
 
Сверху Снизу