Вариантов решений несколько
1. Могут быть адреса, которые явно читать не стоит. такие как
cmp eax, 0
cmp eax, 0xffffffff
Тогда просто сравнить их и все
2. Использовать API Windows для определения прав доступа к адресу на чтение и запись перед обращением
3. Использовать обработку исключений типа этого
4. Использовать CE Lua для определения доступа к адресу
function CheckAddress(address)
return readInteger(address) ~= nil
end
Это функцию можно использовать двумя способами.
Либо через вызов Lua функции из CE AA (в прочем там же можно и сразу писать значение)
Либо кешировать адреса в метки и по Lua таймеру записывать значение по адресам.
5. Вариант искать другое место кода для инъекции
6. Вариант искать условия, когда адрес всегда валидный (например, когда в той же структуре адреса имеют определенные значения)
В большинстве случаев подходит вариант5. Нужно найти другое место кода, откуда например читается значения во время игры только для игрока. Например, когда код читает значение и передает его на экран.