C/C++

Как прочитать память игры?

Вот я хочу чтобы в игре кс программа считывала количество здоровья игрока. При запуске health: показывает всегда 0. Что не так? хелп
Vladimir Maslov
Vladimir Maslov
86
Не проще написать на ассемблере? Прямо считать с нужного адреса значение - и поменять его и тд.
У тебя и не будет ничего возвращать, чтобы получить значение здоровья - нужно знать функцию, где она находится вообще, затем вызвать GetModuleHandle, GetProcAddress и уже там работать.
Владислав Фролов
Владислав Фролов
38 697
Лучший ответ
Vladimir Maslov мне так интересно просто. Хочу узнать что тут не так. я сам этим не часто занимаюсь но вот по кусочкам собираю информацию об этой сфере. Хочу чтобы знающие подсказали.
Для этого нужно примерно следующее:

1. Открыть процесс в режиме дебаггера, а не так, как у тебя. Для этого понадобится создать соотв. security token и все прочее. Я уверен, что твой ReadProcessMemory тупо фейлит, но ты ж даже не позаботился проверить.
2. Выполнить поиск нужного значения в памяти несколько раз по разным величинам, пока не будет однозначно обнаружен его адрес. Ты тупо забил 100 - почему ты решил, что нужная тебе величина находится именно там?
С чего ты вообще взял, что по адресу 0x100 в программе будет что-нибудь лежать??
Baurjan Jakupov
Baurjan Jakupov
65 249
А с чего ты взял, что так можно считывать здоровье игрока через ReadMemory?
Артем Марков
Артем Марков
11 339
Во-первых, второй параметр должен быть указателем, хранящим адрес памяти, принадлежащей исследуемому процессу. Начиная с этого адреса, программа будет читать данные в памяти процесса. Ты же закинул какой-то int, приведенный к типу указателя. В итоге функция получила адрес 0x100 (256). Естественно, по такому адресу она ничего читать не намерена. Передай в последний параметр вместо 0 адрес переменной типа SIZE_T - в эту переменную будет записано количество скопированных в буфер tuff байт памяти. И как ты увидишь, это значение будет равно 0. Твоя переменная tuff всегда равна нулю просто потому, что в нее ничего не записывается. Поскольку переменная глобальная, ее начальное значение всегда инициализируется нулем, а не случайным "мусором", как в случае с обычными переменными.