HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 11.04.2021, 17:13
Ya Zaregalsya
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами: 4714653

Репутация: 98
По умолчанию

Цитата:
Сообщение от .deserve  

1) Да, объяснил ниже.
2) Ты не так разбил по папкам. Надо иначе, ниже объяснил.

Проект с гитхаба тебе нужно просто распаковать в любую другою папку. Но не в проект! И уж тем более не в SDK. SDK - это софт для разработки. Грубо говоря зависимости. Эта папка для зависимостей. А уже в ней есть папки MinHook и в ней Libs и includes. Ты должен собрать либу, которая у тебя должна быть абсолютно в другой папке. После чего ты получаешь файл либы и ищешь в папке github проекта хидер файлы .h. Их ты раскидываешь УЖЕ В СВОЙ проект в папку зависимостей - в нашем случае SDK/MinHook/Libs (для .lib), а SDK/MinHook/includes (для .h).

Почему в build2.0 не появилось файла sln? Перепроверьте то, как вы указали пути в Cmake. Там где source - там должен быть путь до папки github проекта. Там где папка для сбилженых бинарников - там указываешь тот же путь, но создаешь новую папку (но она вроде и сама должна создаться). Например build2.0.
Далее конфигурируешь через кнопку configure, там выбираешь версию vs которая у тебя стоит. После конфигурации нажимаешь Generate. Смотришь в лог снизу, чтобы было всё окей. Далее идешь в папку и там ищешь sln. Всё, дальше всё в гайде.
И на будущее. Обязательно ли проводить все эти манипуляции с CMake если есть готовые .sln и .lib файлы из проекта другого разработчика, как в данном случае?
 
Ответить с цитированием

  #32  
Старый 11.04.2021, 20:11
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

Репутация: 113
По умолчанию

Код:





Код:
urmem::hook urmemHookAimingCoords;
void __fastcall UpdateAimingCoors(void* _this, void* edx, CVector const* AimingTargetCoors)
{
    SF->getSAMP()->getChat()->AddChatMessage(-1, "UpdateAimingCoors");
    SF->getSAMP()->getChat()->AddChatMessage(-1, "UpdateAimingCoors. posX: %f; posY: %f; posZ: %f",
        AimingTargetCoors->fX,
        AimingTargetCoors->fY,
        AimingTargetCoors->fZ);
    urmemHookAimingCoords.call(_this, AimingTargetCoors);
}

urmem::hook urmemHookDoBulletImpact;
void __fastcall DoBulletImpact(void* _this, void* edx, CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint,CColPoint* colPoint, int arg5)
{
    SF->getSAMP()->getChat()->AddChatMessage(-1, "DoBulletImpact");
    SF->getSAMP()->getChat()->AddChatMessage(-1, "DoBulletImpact. posX: %f; posY: %f; posZ: %f",
        endPoint->fX,
        endPoint->fY,
        endPoint->fZ);
    urmemHookDoBulletImpact.call(_this, owner, victim, startPoint, endPoint, colPoint, arg5);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        SF->initPlugin(mainloop, hModule);
        urmemHookAimingCoords.install(0x50CB10, urmem::get_func_addr(&UpdateAimingCoors));
        urmemHookDoBulletImpact.install(0x73B550, urmem::get_func_addr(&DoBulletImpact));
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        urmemHookAimingCoords.disable();
        urmemHookDoBulletImpact.disable();
        break;
    }
    return TRUE;
}


так же посмотри какой там пролог, по стандарту должен быть 5
 
Ответить с цитированием

  #33  
Старый 12.04.2021, 00:10
Ya Zaregalsya
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами: 4714653

Репутация: 98
По умолчанию

Цитата:
Сообщение от anticoder  

Код:





Код:
urmem::hook urmemHookAimingCoords;
void __fastcall UpdateAimingCoors(void* _this, void* edx, CVector const* AimingTargetCoors)
{
    SF->getSAMP()->getChat()->AddChatMessage(-1, "UpdateAimingCoors");
    SF->getSAMP()->getChat()->AddChatMessage(-1, "UpdateAimingCoors. posX: %f; posY: %f; posZ: %f",
        AimingTargetCoors->fX,
        AimingTargetCoors->fY,
        AimingTargetCoors->fZ);
    urmemHookAimingCoords.call(_this, AimingTargetCoors);
}

urmem::hook urmemHookDoBulletImpact;
void __fastcall DoBulletImpact(void* _this, void* edx, CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint,CColPoint* colPoint, int arg5)
{
    SF->getSAMP()->getChat()->AddChatMessage(-1, "DoBulletImpact");
    SF->getSAMP()->getChat()->AddChatMessage(-1, "DoBulletImpact. posX: %f; posY: %f; posZ: %f",
        endPoint->fX,
        endPoint->fY,
        endPoint->fZ);
    urmemHookDoBulletImpact.call(_this, owner, victim, startPoint, endPoint, colPoint, arg5);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        SF->initPlugin(mainloop, hModule);
        urmemHookAimingCoords.install(0x50CB10, urmem::get_func_addr(&UpdateAimingCoors));
        urmemHookDoBulletImpact.install(0x73B550, urmem::get_func_addr(&DoBulletImpact));
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        urmemHookAimingCoords.disable();
        urmemHookDoBulletImpact.disable();
        break;
    }
    return TRUE;
}


так же посмотри какой там пролог, по стандарту должен быть 5
Пролог?
 
Ответить с цитированием

  #34  
Старый 12.04.2021, 00:56
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

Цитата:
Сообщение от Ya Zaregalsya  

Пролог?
Цитата:
Сообщение от Const  

С Redirect хуками мы разобрались, теперь расскажу о Trampoline.
Trampoline от Redirect кардинально отличается. Если Redirect просто подменяет релативный адрес команды вызова или прыжка, то Trampoline взаимодействует с прологом функции.
Что такое пролог функции? Пролог функции - первые несколько байт функции, которые подготавливают стек, пушат регистры.
У пролога есть свой эпилог. Эпилог отличается тем, что он располагается в конце функции, и восстанавливает стек и регистры до того состояния, которое было до вызова.
Расскажу на примере функции void __cdecl CTimer__Update(void):



Логика трамплин хука заключается в том, чтобы этот самый пролог сохранить в отдельную функцию, занопить весь пролог, поставить там прыжок на нашу функцию, в нашей функции вызвать ту, в которой мы сохранили пролог, и вдобавок приписать туда прыжок обратно.
Получается так: вместо пролога, jmp -> наша_функция -> jmp трамплин -> jmp обратно (+1, чтобы не было рекурсии).
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.