• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

CreateDevice hook

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
4
Реакции
0
Здравствуйте,
столкнулся с проблемой хука CreateDevice'a в игре GTA:SA. Проблема в следующем: хук наверняка рабочий, но проблема в его иницилизации, если например я буду иницилизировать хук в точке входа DLL происходит краш. Если же я иницилизирую хук когда игра уже полностью загружена - всё нормально, но вот только смысл хука уже пропал, так как девайс уже создан. Надеюсь на помощь от знающих. Спасибо. Ниже код.
C++:
Expand Collapse Copy
// d3d9_hook.cpp
void CD3DHook::InitDevice()
{
    void** vTableIDirect3D9 = *(void***)(*(DWORD*)0xC97C20); // 0xC97C20 - стат. указатель на IDirect3D9
    VMTHookManager* vmtHookIDirect3D9 = new VMTHookManager(vTableIDirect3D9);
    orig_CreateDevice = (tCreateDevice)vmtHookIDirect3D9->Hook(16, (void*)myCreateDevice);
}

// main.cpp
void mainThread(PVOID)
{
    pD3DHook->InitDevice();
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
    {
        _beginthread(mainThread, NULL, NULL);
    }
    return TRUE;
}
 
Последнее редактирование:
/del
 
Последнее редактирование:
А самим найти указатель на девайс, не?
 
А самим найти указатель на девайс, не?
Пропали краши/исключения в дебаггере. Но хук по прежнему не работает
C++:
Expand Collapse Copy
void CD3DHook::InitDevice()
{
    LPDIRECT3D9 pD3D;
    while ((pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        return;

    void** vTableIDirect3D9 = *(void***)(*(DWORD*)pD3D);
    VMTHookManager* vmtHookIDirect3D9 = new VMTHookManager(vTableIDirect3D9);
    orig_CreateDevice = (tCreateDevice)vmtHookIDirect3D9->Hook(16, (void*)myCreateDevice);
}
 
/del
 
Последнее редактирование:
Пожалуйста, авторизуйтесь для просмотра ссылки.
- имгуи с EndScene (directx тоже используется)
 
Хуки present / reset / endscene у меня есть,
createDevice это метод класса IDirect3D9 а не IDirect3DDevice9
 
Назад
Сверху Снизу