Zo_Om4eG,
тебе нужно эти переменный с оффсетами передавать в функцию-инжект как параметры. Не увидел, что уже так и сделано
Сам посуди, переменная-оффсет у тебя не константа. Так? А переменные - это что? Это по сути адрес, где хранится значение. Правильно? Следовательно, пока функция хранится в твоей проге, строчка
mov eax, HPS1FI
подразумевает обращение к значению переменной в твоей проге.
То есть по сути после компиляции в этом месте проги будет уже определённый адрес переменной в твоей проге.
А что будет, если этот кусок кода заинжектить? Он вместе с этим адресом и "перепишется" в другое адресное пространство, в котором по данному адресу лежит совсем не значение твоего оффсета а какая-то фигня в клиенте. Это если не ошибаюсь.
Если ошибаюсь, и тут пишется глобальный адрес во всей памяти, то тогда после инжекта клиент пытается считать значение оффсета с твоей проги(переменная то у тебя в проге, а не в инжекте), следовательно ошибка доступа(клиент ведь не открывал процесс твоего бота для доступа к его данным
)
Выход - передавать в инжект оффсеты и адреса вместе с другими параметрами, либо как говорил krukovis инжектить готовый байткод с уже прописанными в нем параметрами и оффсетами(а прописывать в своей проге до инжекта)
И вот если не понятно немного пожевать..
обьявим в нашей проге переменную:
int A=3;
Всё, с этого момента наша переменная имеет адрес. Допустим он равен 1234. По этому адресу расположено значение 3. Компилятор видит имя переменной не как набор букав, а как адрес значения. И запись mov eax, A будет аналогична mov eax, [1234]. Но при перемещении такой строчки в другую прогу уже нельзя считывать с адреса 1234, потому и краш.