Другое С/С++ Вопрос - Ответ

undefine

Участник
35
14
как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

C++:
typedef void(__thiscall* CEntity_Render_t)(CEntity* entity);
CEntity_Render_t fpOriginalRender;


void* Create_Hook(
    BYTE* src,
    const BYTE* dst,
    const int len)
{
    BYTE* jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    if (src[0] == 0xE9)
    {
        jmp = (BYTE*)malloc(10);
        jumpto = (*(DWORD*)(src + 1)) + ((DWORD)src) + 5;
        newjump = (jumpto - (DWORD)(jmp + 5));
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = newjump;
        jmp += 5;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src - jmp);
    }
    else
    {
        jmp = (BYTE*)malloc(5 + len);
        memcpy(jmp, src, len);
        jmp += len;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    for (int i = 5; i < len; i++)
        src[i] = 0x90;
    VirtualProtect(src, len, dwback, &dwback);
    return (jmp - len);
}

    fpOriginalRender = (CEntity_Render_t)Create_Hook(
        (BYTE*)0x534310,
        (BYTE*)hkEntityRender,
        0x2F);

но игра просто вылетала
 
  • Bug
Реакции: 0x9

AdCKuY_DpO4uLa

Адский дрочер
Друг
369
815
как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

C++:
typedef void(__thiscall* CEntity_Render_t)(CEntity* entity);
CEntity_Render_t fpOriginalRender;


void* Create_Hook(
    BYTE* src,
    const BYTE* dst,
    const int len)
{
    BYTE* jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    if (src[0] == 0xE9)
    {
        jmp = (BYTE*)malloc(10);
        jumpto = (*(DWORD*)(src + 1)) + ((DWORD)src) + 5;
        newjump = (jumpto - (DWORD)(jmp + 5));
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = newjump;
        jmp += 5;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src - jmp);
    }
    else
    {
        jmp = (BYTE*)malloc(5 + len);
        memcpy(jmp, src, len);
        jmp += len;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    for (int i = 5; i < len; i++)
        src[i] = 0x90;
    VirtualProtect(src, len, dwback, &dwback);
    return (jmp - len);
}

    fpOriginalRender = (CEntity_Render_t)Create_Hook(
        (BYTE*)0x534310,
        (BYTE*)hkEntityRender,
        0x2F);

но игра просто вылетала
Дрянь какая-то. Используй нормальные хукеры. Ты должен сохранять пролог ф-ии, на которую ставишь хук, вместо пролога ставить jmp на свой кусок памяти, который заранее выделяется, в котором будет восстановлен оригинальный код пролога, после чего уже прыжок на свою ф-ию, которая должна быть вызвана вместо оригинала
 
  • Нравится
Реакции: moreveal

tylerwiller

Новичок
1
0
Всем привет, я пытаюсь сделать Silent Aim с эффектом крови, как в этом видео. У меня уже есть рабочий код Silent Aim, мне нужен только код эффекта крови. Может ли кто-нибудь помочь?
 

Wowisky

Новичок
3
1
It's probably not really related to CPP but still, do you think there's a way to watch damage in the stream zone (like this https://www.blast.hk/threads/165373/) but in a lagcomp 0 server? It does rely in OnPlayerWeaponShot and it does only work in lagcomp 1 servers, maybe do you know any other trick or something? Or any idea? Client Side of course. Thanks!
 

swlm

Участник
52
18
Всем привет. Кто-то может знает, как сделать, чтобы позиция прикриплённого объекта была не статическая? А то например когда я приседаю, приатаченный объект не движется за игроком.


C++:
void CWeaponSkins::AttachModelToPlayer(CPed* ped, short weaponId)
{
    if (!ped) return;
    if (!m_WeaponSkins[ped].contains(weaponId)) return;

    unsigned short skinModelId = m_WeaponSkins[ped][weaponId];

    CStreaming::RequestModel(skinModelId, 0);
    CStreaming::LoadAllRequestedModels(false);

    CObject* obj = CObject::Create(skinModelId);
    if (!obj) return;

    obj->SetIsStatic(true);
    obj->bIsVisible = true;
    obj->bAttachedToEntity = true;

    plugin::Command<eScriptCommands::COMMAND_ATTACH_OBJECT_TO_CHAR>(
        obj, ped,
        0.05f, -0.18f, -0.25f,
        90.0f, 0.0f, 185.0f
    );
}
 
Последнее редактирование:

vmprotect

Известный
396
272
Какая функция отвечает за остановку неона на машину? Как это происходит
 

Nymphomaniac

Новичок
8
3
Всем привет. Кто-то может знает, как сделать, чтобы позиция прикриплённого объекта была не статическая? А то например когда я приседаю, приатаченный объект не движется за игроком.


C++:
void CWeaponSkins::AttachModelToPlayer(CPed* ped, short weaponId)
{
    if (!ped) return;
    if (!m_WeaponSkins[ped].contains(weaponId)) return;

    unsigned short skinModelId = m_WeaponSkins[ped][weaponId];

    CStreaming::RequestModel(skinModelId, 0);
    CStreaming::LoadAllRequestedModels(false);

    CObject* obj = CObject::Create(skinModelId);
    if (!obj) return;

    obj->SetIsStatic(true);
    obj->bIsVisible = true;
    obj->bAttachedToEntity = true;

    plugin::Command<eScriptCommands::COMMAND_ATTACH_OBJECT_TO_CHAR>(
        obj, ped,
        0.05f, -0.18f, -0.25f,
        90.0f, 0.0f, 185.0f
    );
}
obj->SetIsStatic(false); попробуй
 

вайега52

Налуашил состояние
Модератор
2,994
3,116
Как правильно слать ракнет пакеты через битстрим в samp?
 

vmprotect

Известный
396
272
Мне на сервер именно нужно , через плагин под сервер
 

0xff65

Участник
35
2
Приветствую, есть у кого эти оффесты на r3-0?


C++:
        // unknown, r1, r2, r3-1, r4, r5
        define_offset(Info,                    0, 0x21A0F8, 0x21A100, 0x26E8DC, 0x26EA0C, 0x26EB94)
        define_offset(InputInfo,            0, 0x21A0E8, 0x21A0F0, 0x26E8CC, 0x26E9FC, 0x26EB84)
        define_offset(AddCommand,            0, 0x65AD0,  0x65BA0,  0x69000,  0x69730,  0x69770)  
    } // namespace offsets
 
Последнее редактирование:

Loku

Известный
33
7
Hello, does anyone have these offsites on r3-0?


C++:
 // unknown, r1, r2, r3-1, r4, r5
        define_offset(Info, 0, 0x21A0F8, 0x21A100, 0x26E8DC, 0x26EA0C, 0x26EB94)
        define_offset(InputInfo, 0, 0x21A0E8, 0x21A0F0, 0x26E8CC, 0x26E9FC, 0x26EB84)
        define_offset(AddCommand, 0, 0x65AD0, 0x65BA0, 0x69000, 0x69730, 0x69770) 
    } // namespace offsets
there's no r1-0 as far as i know, there's a r4-2 version though