В 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.
Т.е. через функцию спокойно проходит
Для ясности могу скинуть полный код