 |
|

11.04.2021, 17:13
|
|
Постоянный
Регистрация: 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 файлы из проекта другого разработчика, как в данном случае?
|
|
|

11.04.2021, 20:11
|
|
Участник форума
Регистрация: 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
|
|
|

12.04.2021, 00:10
|
|
Постоянный
Регистрация: 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
Пролог?
|
|
|

12.04.2021, 00:56
|
|
Познавший АНТИЧАТ
Регистрация: 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)
|
|
|
|