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

legendabrn

Известный
Проверенный
121
171
как на плюсах подменить структуру из памяти, на свою?
 

legendabrn

Известный
Проверенный
121
171
Так же, как и любое значение из памяти, через reinterpret_cast, наверно.
Код:
#pragma pack(push, 1)
struct CAR_MOD_INFO
{
    int test;
} mTest[24];
#pragma pack(pop)

*reinterpret_cast<uintptr_tr*>(0xABCFFF + 0xAB) = *reinterpret_cast<uintptr_t*>(&mTest[1]);
пытался таким способом, безуспешно
 

legendabrn

Известный
Проверенный
121
171
Лучше опиши всю задачу, что тебе надо сделать
В структуре хранится переменная типа char, но она позволяет хранить значения до 255, я подумал а почему бы не заменить на свою структуру с int и все будет заебумба))
Просмотрев в IDA где используется данная структура, на работоспособность никак не должна повлиять
Попробуй так *reinterpret_cast<CAR_MOD_INFO**>(addr) = &mTest[1];
не работает
 

.deserve

Участник
32
36
В структуре хранится переменная типа char, но она позволяет хранить значения до 255, я подумал а почему бы не заменить на свою структуру с int и все будет заебумба))
Просмотрев в IDA где используется данная структура, на работоспособность никак не должна повлиять

не работает
Проверь защиту страницы памяти по этому адресу.
Если это адрес структуры, то ты не сможешь поменять структуру по нему, т.к выравнивание по границам страниц похерится.
А если это адрес указателя, то ты можешь записать в него адрес начала своей структуры и читать оттуда по 4 байта. Но всё остальное всё равно будет читать оттуда по 1 байту. При этом, если у тебя будет прямой порядок байт (big endian), то когда по этому адресу будут читать 1 байт, то будет читаться старший байт из 4 байтового целочисленного типа. А если little endian, как на большинстве x86, то всё будет ок: младший байт и будет первым.

И еще мне не понятно: нахера тебе для этой структуры выравнивание упаковки в 1 байт, если у тебя там 1 4 байтовый мембер. А по дефолту выравнивание стоит на 8 байт.
 
  • Нравится
Реакции: etereon и legendabrn

PawnHelp

Новичок
6
0
Всем приветик, помогите решить проблему с сервер коннектом
1631130364177.png

Код:
#define SAMP_CHAT_INFO_OFFSET 0x26E8C8
#define SAMP_FUNC_ADDTOCHATWND 0x67460

SAMPBase *pSAMP;

void mainThread(void *pvParams)
{
    if (pSAMP)
    {
        while (!pSAMP->tryInit())
            Sleep(100);

        while (!pSAMP->isInited)
            continue;
        strcpy(pSAMP->getInfo()->m_szHostAddress, "217.106.106.86");
        pSAMP->getInfo()->m_nPort = 7024;
    }
}


BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
        {
            pSAMP = new SAMPBase(GetModuleHandle("samp.dll"));
            _beginthread(mainThread, NULL, NULL);
            break;
        }
    }
    return TRUE;
}
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
369
815
Дайте адрес, который вызывается, когда самп полностю проинициализировался (структуры там всякие и т.д.), если есть
 
  • Грустно
Реакции: DarkP1xel

#Northn

Известный
Всефорумный модератор
2,659
2,602
  • Влюблен
Реакции: AdCKuY_DpO4uLa

sc6ut

неизвестный
Модератор
385
1,108
кроче хук 36 rpc create 3d text выводит в чат херню всякую
Посмотреть вложение 113869
кусок кода который ты показал просто прелестен, идеален. но может всё же покажешь как хукаешь, какая версия самп, ну или на крайний случай дашь хоть какуе-то информацию, кроме того как ты читаешь непонятно еще правильный ли битстрим.