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

SR_team

like pancake
BH Team
4,920
6,624
C++:
CVector vecSpeed = *(CVector*)((pPed) + 0x44);
                    ReadProcessMemory(pHandle, (LPCVOID)vecSpeed, &vecSpeed, 4, 0);
Как правильно сделать? А то не дает CVector в LPCVOID преобразовать.
потому что хуйню написал. читаешь вектор из свой программы, а потом в ReadProcessMemory пытаешься запихать этот вектор вместо адреса
 

iAmerican

Известный
Друг
611
261
потому что хуйню написал. читаешь вектор из свой программы, а потом в ReadProcessMemory пытаешься запихать этот вектор вместо адреса

как мне его прочитать? что бы потом с ним мат. действия выполнять
C++:
DWORD vPos = (DWORD)((pPed) + 0x14);
                    ReadProcessMemory(pHandle, (LPCVOID)vPos, &vPos, 4, 0);
Это получается тоже неправильно ?
 

SR_team

like pancake
BH Team
4,920
6,624
как мне его прочитать? что бы потом с ним мат. действия выполнять
C++:
DWORD vPos = (DWORD)((pPed) + 0x14);
                    ReadProcessMemory(pHandle, (LPCVOID)vPos, &vPos, 4, 0);
Это получается тоже неправильно ?
конечно не правильно. загугли "ReadProcessMemory example c++"
 

iAmerican

Известный
Друг
611
261
конечно не правильно. загугли "ReadProcessMemory example c++"

ты понимаешь что это EXE приложение?
То что ты сказал, что vPos тоже не правильно , оно правильно 100%

C++:
CVector vecSpeed;// = *(CVector*)((pPed)+0x44);
                    ReadProcessMemory(pHandle, (LPCVOID)((pPed)+0x44), &vecSpeed, 4, 0);

Вот так вот читает , но только координату X :(
 
Последнее редактирование:

iAmerican

Известный
Друг
611
261
C++:
char Hostname() {

    ReadProcessMemory(pHandle, (LPVOID)(SAMPDLLBASE + 0x21A0F8), (LPVOID)&Out, sizeof(Out), NULL);
    char ServerString[128];
    ReadProcessMemory(pHandle, (LPVOID)(Out+ 0x121), &ServerString, 128, NULL);
    cout << ServerString << endl;

    return ServerString[128];

}

В отдельности читает все отлично , но хочу сделать это функцией , что бы вызывать , например вот так :
C++:
printf("%s",Hostname());
Но бьет ошибку.
Думаю это из за того что я как то не так возвращаю ServerString , подскажите пж.
Код:
Вызвано исключение по адресу 0x6D6D2E47 (ucrtbase.dll) в API.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFD8.

Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.
 

SR_team

like pancake
BH Team
4,920
6,624
хочу сделать это функцией
C++:
std::string Hostname() {

    ReadProcessMemory(pHandle, (LPVOID)(SAMPDLLBASE + 0x21A0F8), (LPVOID)&Out, sizeof(Out), NULL);
    char ServerString[128];
    ReadProcessMemory(pHandle, (LPVOID)(Out+ 0x121), &ServerString, 128, NULL);
    cout << ServerString << endl;

    return ServerString;

}
Вывод: cout << Hostname() << std::endl;
Либое, если хочешь через printf, то printf(Hostname().c_str());
 
  • Нравится
Реакции: iAmerican

iAmerican

Известный
Друг
611
261
C++:
std::string Hostname() {

    ReadProcessMemory(pHandle, (LPVOID)(SAMPDLLBASE + 0x21A0F8), (LPVOID)&Out, sizeof(Out), NULL);
    char ServerString[128];
    ReadProcessMemory(pHandle, (LPVOID)(Out+ 0x121), &ServerString, 128, NULL);
    cout << ServerString << endl;

    return ServerString;

}
Вывод: cout << Hostname() << std::endl;
Либое, если хочешь через printf, то printf(Hostname().c_str());
c.str() не обязателен оказался, пока решил оставить через указатель. Не знаю конечно как лучше , но все равно спасибо!

указатель возвращай

Благодарю.
 

Woofing Giraffe

Активный
402
49
Подскажите, как получить никнейм игрока при RPC_ClientJoin.
Код:
Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin:

bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
    if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin
    {
        short int sPlayerID;   
        D3DCOLOR D3DPlayerColor;
        byte isNPC, nameLen;
        char szPlayerName[25];
        params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
        params->bitStream->Read( sPlayerID ); // читаем ID игрока.
        params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока.
        params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет.
        params->bitStream->Read( nameLen ); // длина ника.
        params->bitStream->Read( szPlayerName, nameLen ); // ник.
        szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора
        params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
        SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.",
            szPlayerName, sPlayerID ); // добавляем сообщение в чат.           
    };
    return true; // успешно завершаем обработку RPC.
};
SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback