Вопрос Не могу получить переменную

Начинающий
Статус
Оффлайн
Регистрация
5 Окт 2024
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Всем доброго времени суток,прошу сильно мне помочь. До написания вопроса около 4 часов бился над этой проблемой, не могу найти решение.

КОД:

DWORD localPlayerAddress = 0;
uintptr_t clientBase = GetClientModuleBase(hProcess);
if (clientBase) {
ReadProcessMemory(hProcess, LPCVOID(&clientBase + dwLocalPlayerPawn), LPVOID(localPlayerAddress), sizeof(localPlayerAddress), 0);
logFile << "DEBUG: ClientBase value: " << &clientBase << endl;
}
else {
logFile << "ERROR: Unable to read clientBase" << endl;
}

Player localPlayer(localPlayerAddress);

______________________________________________________________________________________________________________________________________________

Итак,запрашиваю на вывод localPlayerAddress(он должен быть оффсетом игрока), пишет валидный clientBase, но при прибавлении к нему оффсета(uintptr_t dwLocalPlayerPawn = 0x1825138;) все равно пишет, что равен 0, следовательно не находятся все необходимые смещения по оффсетам(health,ammo,teamNum). оффсет абсолютно верный,взят с актуального дампа.

КОД ФУНКЦИЙ:
______________________________________________________________________________________________________________________________________________

uintptr_t GetProcessIdByName(const wchar_t* processName) {
PROCESSENTRY32 processEntry; // Структура для хранения информации о процессе
processEntry.dwSize = sizeof(PROCESSENTRY32); // Устанавливаем размер структуры
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // Создаем снимок всех процессов в системе

if (snapshot == INVALID_HANDLE_VALUE) { // Проверяем, удалось ли создать снимок
logFile << "ERROR: Failed to screen processes." << std::endl; // Сообщаем об ошибке, если снимок не создан
return 0;
}

// Итерируемся по процессам в снимке
if (Process32First(snapshot, &processEntry)) {
do {
// Сравниваем имя текущего процесса с нужным именем
if (!_wcsicmp(processEntry.szExeFile, processName)) {
uintptr_t processId = processEntry.th32ProcessID; // Получаем ID процесса
CloseHandle(snapshot); // Закрываем снимок после нахождения процесса
return processId; // Возвращаем ID найденного процесса
}
} while (Process32Next(snapshot, &processEntry)); // Переходим к следующему процессу в списке
}

CloseHandle(snapshot);
return 0;
}
______________________________________________________________________________________________________________________________________________

uintptr_t GetClientModuleBase(HANDLE hProcess)
{
HMODULE hMods[1024];
DWORD cbNeeded = 0x0;
// Получаем список загруженных модулей в процессе
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
for (unsigned int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
TCHAR szModName[MAX_PATH];
// Получаем имя каждого модуля
if (GetModuleBaseName(hProcess, hMods, szModName, sizeof(szModName) / sizeof(TCHAR))) {
if (_tcsicmp(szModName, _T("client.dll")) == 0) {
return (uintptr_t)hMods;
}
}
}
}
return 0;
}
_______________________ _________________________ ______________ _________________ _______ __________
НАСТОЯТЕЛЬНО ПРОШУ ПОМОЧЬ ЗНАЮЩИХ ЛЮДЕЙ, ПРИВЕТСТВУЕТСЯ ЛЮБАЯ КОНСТРУКТИВНАЯ КРИТИКА И ЗАМЕЧАНИЯ ПО КОДУ!!!
_______________________ _________________________ ______________ _________________ _______ __________
 
Сверху Снизу