Задать вопрос
@crowcs

Не работает поиск через Массив байтов, как исправить?

В Cheat Engine врубаю поиск через Массив байтов, ввожу нужные мне значения 89 88 90, отлично находит адресса, так-же и находит нужный мне адресс.
Написал реализацию поиска в визуалке, добавил куча откладок, находяться адресса но и близко не те какие находятся в Cheat Engine

Вызов поиска в main.cpp

BYTE ammoDecBytes[] = { 0x89, 0x88, 0x90};
  int size;

  uintptr_t* addresses = AOB(ammoDecBytes, sizeof(ammoDecBytes), size);
  for (int i = 0; i < size; ++i)
  {
      std::cout << std::hex << addresses[i] << std::endl;
  }
  delete[] addresses;


Реализация функции в memoryReader.cpp

uintptr_t* AOB(const BYTE* pattern, size_t patternSize, int& resultsCount)
{
    resultsCount = 0;

    // Получаем базовый адрес и размер модуля
    uintptr_t baseAddress = GetModuleBaseAddress(L"FPS Emgine.exe");
    if (!baseAddress) return nullptr;

    MODULEENTRY32W modEntry = { 0 };
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, processId);
    modEntry.dwSize = sizeof(modEntry);

    uintptr_t moduleSize = 0;
    if (Module32FirstW(hSnap, &modEntry)) {
        do {
            if (!_wcsicmp(modEntry.szModule, L"FPS Emgine.exe")) {
                moduleSize = modEntry.modBaseSize;
                break;
            }
        } while (Module32NextW(hSnap, &modEntry));
    }
    CloseHandle(hSnap);

    if (!moduleSize) return nullptr;

    // Чтение всей памяти модуля
    BYTE* moduleBytes = RBM(baseAddress, moduleSize);
    std::vector<uintptr_t> matches;

    for (size_t i = 0; i < moduleSize - patternSize; ++i) {
        bool found = true;
        for (size_t j = 0; j < patternSize; ++j) {
            if (moduleBytes[i + j] != pattern[j]) {
                found = false;
                break;
            }
        }

        if (found) {
            matches.push_back(baseAddress + i);
        }
    }

    delete[] moduleBytes;

    // Копируем в обычный массив
    resultsCount = static_cast<int>(matches.size());
    if (resultsCount == 0) return nullptr;

    uintptr_t* resultArray = new uintptr_t[resultsCount];
    for (int i = 0; i < resultsCount; ++i) {
        resultArray[i] = matches[i];
    }

    return resultArray;
}


В консоли выходит: No matches found.
Т.е. через функцию спокойно проходит

Для ясности могу скинуть полный код
  • Вопрос задан
  • 39 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
@crowcs Автор вопроса
Все окей, проблема была в том что я взял диапазон exe, хотя адресс вне диапазоне. Ну теперь узнал что не всегда нужные адресса для игр находятся в диапазоне exe.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы