![]() |
код че:
Код:
usingпытаюсь хукнуть CChat__AddEntry, чтоб сменить текст samp started бла бла бла, но игра после запуска просто крашится |
Цитата:
|
Цитата:
|
C++:
Код:
usingЕсли все равно крашит - проблема в адресе или функции для хука |
Цитата:
https://forum.antichat.xyz/attachments/28547032/ также глянул в иде, адреса совпадают на р3 крашит до сих пор плюс: Код:
#include "plugin.h" |
У __fastcall'a в х86 архитектуре аргументы передаются в ecx, edx + стэк, тебе надо в хуке после объекта добавить ещё один аргумент любой(чтобы учесть edx). В оригинал соответственно edx передавать не надо, т.к у thiscall передача ecx + stack.
|
Цитата:
[CODE] void __fastcall HOOK_AddEntry ( void * pChat , void * EDX , int nType , const char * szText , const char * szPrefix , unsigned long textColor , unsigned long prefixColor ) { std :: cout : " внес правки, samp started бла бла бла прошло, а когда начала выбиваться следующая строка(коннект на сервер) крашнуло |
Закоментируй свой вывод в хуке и посмотри что будет. И попробуй отладчиком посмотреть, где крашит.
|
Цитата:
|
Ты ставишь хук на пролог функции, а не на один из ее вызовов, да и по коду непонятно как у тебя вообще твоя функция вызывается, ибо ты даже не пишешь 0xE8 или 0xE9.
Второе, тебе нужен JMP hook (для него есть библиотека minhook например) в таком случае (если ты хукаешь пролог функции), иначе ты просто караптнешь стек и краш |
Цитата:
|
У тебя функция по реализации меняет rva(когда ты передаёшь адрес пролога функции), либо перепиши и измени оффсет, либо юзай такое или минхук
C++: Код:
staticТолько надо добавить сохранение указателя на ориг функцию, ибо код из инета взял для примера. |
код:
Код:
#include "plugin.h"че то все равно крашит |
Цитата:
также учти, точно ли ты юзаешь верную версию сампа, ведь у тебя адрес для р3. с моим проектом это должно выглядеть так(должно работать, не тестил): C++: Код:
// объявляю функциюp.s лучше почитай про хуки, какие типы бывают и как работают, а также используй готовые решения, как например писал раньше - MinHook, это намного удобнее и круче |
Цитата:
C++: Код:
#include "plugin.h" |
Цитата:
Цитата:
|
https://forum.antichat.xyz/attachments/28547300/
я чекал в иде по samp.dll, адрес сходится |
c MinHook работает нормально
C++: Код:
typedef |
Цитата:
Код: Код:
std::uintptr_t address_func_to_hook =засунуть в game_loop, разве это так должно работать? не в c_plugin::c_plugin? |
Цитата:
|
Цитата:
тебе надо это в геймлуп засунуть что-ли? c_plugin - это конструктор, который выступает в роли аля dllmain, он вызывается 1 раз, геймлуп вызывается постоянно, можешь и там хук ставить просто проверяя на иниацилизацию и все, как хочешь |
Цитата:
|
Цитата:
|
| Время: 06:24 |