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

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

Репутация: 183


По умолчанию

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

Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.

C++:





Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call

(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;


Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
Вторым аргументом будет void* edx

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

— Как обжарить хлеб в тостере?
— Покупаешь хлеб и жаришь. Сварочный аппарат в помощь.
Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]

Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...

www.blast.hk
 
Ответить с цитированием

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

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

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

Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.

C++:





Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call

(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;


Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
 
Ответить с цитированием

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

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

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

Вторым аргументом будет void* edx

Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]

Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...

www.blast.hk

Спасибо за ссылку! Правильно ли я понимаю, что функции из библиотеки SF и PSDK (в частности DoBulletImpact()) использует не только программист, но и игра? Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
 
Ответить с цитированием

  #14  
Старый 24.01.2021, 13:54
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

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

Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
Вечером попробую разобратся. Как говорил писал методом научного тыка.
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

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

Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
Будет, но нужно будет вызвать функцию, которая была до тебя, для того, чтобы не сломать цепочку вызовов.

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

Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
C++:





Код:
void
DoBulletImpact
(
void
*
_this
,
void
*
edx
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
/* Твой код */
// вызов той функции, что была до нас, DoBulletImpact ничего не возвращает, поэтому указываем только соглашение о вызове __thiscall
hook
.
call

(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
}
 
Ответить с цитированием

  #16  
Старый 24.01.2021, 14:08
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

Спасибо за ссылку! Правильно ли я понимаю, что функции из библиотеки SF и PSDK (в частности DoBulletImpact()) использует не только программист, но и игра? Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
у меня на гитхабе в BulletTracer есть хук этой функции

kin4stat - Overview

20 y.o. student . kin4stat has 55 repositories available. Follow their code on GitHub.

github.com
 
Ответить с цитированием

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

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

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

Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.

C++:





Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call

(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;


Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
В прошлый раз ни с одним методом так ничего и не получилось, сейчас решил попробовать снова для решения этой проблемы. Вот новый код:

C++:





Код:
//Убран код с подключением библиотек и mainloop().
urmem
::
hook urmemHook
;
void
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
)
;
urmemHook
.
call

(
_this
,
AimingTargetCoors
)
;
}
void
DoBulletImpact
(
void
*
_this
,
void
*
edx
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"DoBulletImpact"
)
;
urmemHook
.
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
)
;
urmemHook
.
install
(
0x50CB10
,
urmem
::
get_func_addr
(
&
UpdateAimingCoors
)
)
;
urmemHook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
urmemHook
.
disable
(
)
;
break
;
}
return
TRUE
;
}


При каждом вызове перехватываемой функции должно отправляться сообщение в чат. В итоге игра запускается, другие функции (не хуки) из этого плагина работают, но сообщений в чате нет. Что я делаю неправильно?
 
Ответить с цитированием

  #18  
Старый 31.03.2021, 15:11
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

Что я делаю неправильно?
Как минимум у самой функции хука DoBulletImpact должно быть соглашение о вызове __fastcall (если msvc, на mingw __thiscall)
 
Ответить с цитированием

  #19  
Старый 31.03.2021, 15:21
Ya Zaregalsya
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами: 4714653

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

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

Как минимум у самой функции хука DoBulletImpact должно быть соглашение о вызове __fastcall (если msvc, на mingw __thiscall)
Добавление __fastcall ничего не изменило, на __thiscall жалуется VS.
 
Ответить с цитированием

  #20  
Старый 31.03.2021, 15:29
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

Добавление __fastcall ничего не изменило, на __thiscall жалуется VS.
urmem не пользовался, сказать не могу

__fastcall на обе функции нужен
 
Ответить с цитированием
Ответ



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

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


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




ANTICHAT ™ © 2001- Antichat Kft.