Тема: беда с аси
Показать сообщение отдельно

  #7  
Старый 10.10.2024, 20:36
nonelike
Познающий
Регистрация: 22.12.2018
Сообщений: 72
С нами: 3890632

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

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

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

также учти, точно ли ты юзаешь верную версию сампа, ведь у тебя адрес для р3.
с моим проектом это должно выглядеть так(должно работать, не тестил):

C++:





Код:
// объявляю функцию
// объявление функции нужно, чтобы можно было использовать decltype для создания
// объекта хука, не указывая тип явно через using. это упрощает код, так как
// вывод типа происходит автоматически, однако, можно было бы и явно определить
// тип с помощью using
void
__fastcall
add_chat_entry
(
void
*
pChat
,
void
*
edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
unsigned
long
textColor
,
unsigned
long
prefixColor
)
;
// создаю объект хука, в котором указываю тип функции, с помощью decltype
inline
c_hook

add_chat_entry_hook
{
}
;
void
__fastcall
add_chat_entry
(
void
*
pChat
,
void
*
edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
unsigned
long
textColor
,
unsigned
long
prefixColor
)
{
//вывод текста в чате
std
::
printf
(
"add_chat_entry: %s\n"
,
szText
)
;
// вызов оригинала
return
add_chat_entry_hook
.
call_original
(
pChat
,
edx
,
nType
,
szText
,
szPrefix
,
textColor
,
prefixColor
)
;
}
// edx - неиспользуемый параметр, так как функция использует __fastcall.
// этот регистр добавлен для совместимости с thiscall-функцией,
// поскольку __fastcall требует двух регистров (ecx и edx),
// что позволяет перехватывать вызовы thiscall функций
c_plugin
::
c_plugin
(
HMODULE hmodule
)
:
_hmodule
(
hmodule
)
{
attach_console
(
)
;
std
::
uintptr_t address_func_to_hook
=
(
std
::
uintptr_t
)
GetModuleHandleA
(
"samp.dll"
)
+
0x67460
;
add_chat_entry_hook
.
set_adr
(
address_func_to_hook
)
;
add_chat_entry_hook
.
add
(
&
add_chat_entry
)
;
}


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

Код:





Код:
std::uintptr_t address_func_to_hook =

      (std::uintptr_t)GetModuleHandleA("samp.dll") + 0x67460;

  add_chat_entry_hook.set_adr(address_func_to_hook);

  add_chat_entry_hook.add(&add_chat_entry);


засунуть в game_loop, разве это так должно работать? не в c_plugin::c_plugin?
 
Ответить с цитированием