/q samp crash #2

legendabrn

Известный
Автор темы
Проверенный
120
170
проблема с деструктором ракнета ( была такая же тема, только от kin4stat ), что я делаю неправильно?

C++:
MH_CreateAndEnableHook(pSAMP->dwSAMPAddr + 0x9525, &HOOK_RakClientDestructor, NULL);

C++:
__declspec(naked) void HOOK_RakClientDestructor(void)
{
    if (pSAMP->getInfo()->pRakClientInterface != NULL)
        delete pSAMP->getInfo()->pRakClientInterface;

    pSAMP->getInfo()->pRakClientInterface = pSAMP->getRakClientInterface();
    static DWORD retDestruct = pSAMP->dwSAMPAddr + 0x37686;

    __asm
    {
        mov     eax, [esp + 04]
        test    eax, eax
        jmp     retDestruct
    }
}

1612512298144.png
 
Последнее редактирование:
Решение
C++:
typedef void(__fastcall* sub_10009510)(void*);

sub_10009510 fpHkDestructor = 0;

void __fastcall HOOK_sub_10009510(void* pThis) {
    pSAMP->getInfo()->pRakClientInterface = pSAMP->getRakClientInterface();
    return fpHkDestructor(pThis);
}

MH_CreateHook(reinterpret_cast<void*>(dwSAMP + 0x9510), &HOOK_sub_10009510, reinterpret_cast<void**>(&fpHkDestructor));
MH_EnableHook(reinterpret_cast<void*>(dwSAMP + 0x9510));

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,746
4,831
проблема с деструктором ракнета ( была такая же тема, только от kin4stat ), что я делаю неправильно?

C++:
MH_CreateAndEnableHook(pSAMP->dwSAMPAddr + 0x9525, &HOOK_RakClientDestructor, NULL);

C++:
__declspec(naked) void HOOK_RakClientDestructor(void)
{
    if (pSAMP->getInfo()->pRakClientInterface != NULL)
        delete pSAMP->getInfo()->pRakClientInterface;

    pSAMP->getInfo()->pRakClientInterface = pSAMP->getRakClientInterface();
    static DWORD retDestruct = pSAMP->dwSAMPAddr + 0x37686;

    __asm
    {
        mov     eax, [esp + 04]
        test    eax, eax
        jmp     retDestruct
    }
}
в момент удаления там уже может лежать не твой RakClient
Также у тебя не сохранены регистры
 

legendabrn

Известный
Автор темы
Проверенный
120
170
в момент удаления там уже может лежать не твой RakClient
Также у тебя не сохранены регистры
других асишников нет, так что скорее всего, лежит мой ( мб не правильно понял тебя)
можешь по подробнее рассказать сохранения регистров?
 

CleanLegend

Известный
Всефорумный модератор
478
935
других асишников нет, так что скорее всего, лежит мой ( мб не правильно понял тебя)
можешь по подробнее рассказать сохранения регистров?
__asm pushad - в начале выполнения твоих действий
__asm popad - в конце твоих действий, перед использованием оригинальных байт и прыжком

и покажи инициализацию
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,746
4,831
C++:
typedef void(__fastcall* sub_10009510)(void*);

sub_10009510 fpHkDestructor = 0;

void __fastcall HOOK_sub_10009510(void* pThis) {
    pSAMP->getInfo()->pRakClientInterface = pSAMP->getRakClientInterface();
    return fpHkDestructor(pThis);
}

MH_CreateHook(reinterpret_cast<void*>(dwSAMP + 0x9510), &HOOK_sub_10009510, reinterpret_cast<void**>(&fpHkDestructor));
MH_EnableHook(reinterpret_cast<void*>(dwSAMP + 0x9510));
 
  • Нравится
Реакции: legendabrn