Перейти к содержанию

Как защититься от вылета при чтении несуществующего указателя?


Рекомендуемые сообщения

Случается так, что в игре адрес меняется постоянно и приходится каждый раз при записи/чтении в/из адреса прогонять все указатели,

но бывают случаи(игра загружается) когда его не существует, и при попытке узнать адрес происходит крах... мой код:

template <typename T1 = int, typename T2 = DWORD>T1* PointerReader(T2 base, int offsets[], int level){	//printf("Base = 0x%X	| (int*)Base = 0x%p\n", base, reinterpret_cast<T1*>(base));			T1 *pointer = reinterpret_cast<T1*>(base);	   			for (int i = 0; i < level; i++)		{                                //if (pointer != nullptr && (*pointer + offsets[i]) != nullptr) - пробовал так, но не спасает =\				pointer = reinterpret_cast<T1*>(*pointer + offsets[i]);				//printf("Pointer = 0x%p , *Pointer = 0x%X\n", pointer, *pointer);		}		return pointer;}

Подскажите как организовать правильно проверку :)

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

__try {

pointer = reinterpret_cast<T1*>(*pointer + offsets);

}

__except(EXCEPTION_EXECUTE_HANDLER) {

std::err << "Bad pointer at level " << i << ", address " << pointer << std::endl;

pointer = nullptr;

break;

}

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

__try {   pointer = reinterpret_cast<T1*>(*pointer + offsets[i]);}__except(EXCEPTION_EXECUTE_HANDLER) {   std::err << "Bad pointer at level " << i << ", address " << pointer << std::endl;   pointer = nullptr;   break;}

Спасибки !!! ) Выручил

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.