
C/C++
Как прочитать память игры?
Вот я хочу чтобы в игре кс программа считывала количество здоровья игрока. При запуске health: показывает всегда 0. Что не так? хелп


Не проще написать на ассемблере? Прямо считать с нужного адреса значение - и поменять его и тд.
У тебя и не будет ничего возвращать, чтобы получить значение здоровья - нужно знать функцию, где она находится вообще, затем вызвать GetModuleHandle, GetProcAddress и уже там работать.
У тебя и не будет ничего возвращать, чтобы получить значение здоровья - нужно знать функцию, где она находится вообще, затем вызвать GetModuleHandle, GetProcAddress и уже там работать.
Vladimir Maslov
мне так интересно просто. Хочу узнать что тут не так. я сам этим не часто занимаюсь но вот по кусочкам собираю информацию об этой сфере. Хочу чтобы знающие подсказали.
Для этого нужно примерно следующее:
1. Открыть процесс в режиме дебаггера, а не так, как у тебя. Для этого понадобится создать соотв. security token и все прочее. Я уверен, что твой ReadProcessMemory тупо фейлит, но ты ж даже не позаботился проверить.
2. Выполнить поиск нужного значения в памяти несколько раз по разным величинам, пока не будет однозначно обнаружен его адрес. Ты тупо забил 100 - почему ты решил, что нужная тебе величина находится именно там?
1. Открыть процесс в режиме дебаггера, а не так, как у тебя. Для этого понадобится создать соотв. security token и все прочее. Я уверен, что твой ReadProcessMemory тупо фейлит, но ты ж даже не позаботился проверить.
2. Выполнить поиск нужного значения в памяти несколько раз по разным величинам, пока не будет однозначно обнаружен его адрес. Ты тупо забил 100 - почему ты решил, что нужная тебе величина находится именно там?
С чего ты вообще взял, что по адресу 0x100 в программе будет что-нибудь лежать??
А с чего ты взял, что так можно считывать здоровье игрока через ReadMemory?
Во-первых, второй параметр должен быть указателем, хранящим адрес памяти, принадлежащей исследуемому процессу. Начиная с этого адреса, программа будет читать данные в памяти процесса. Ты же закинул какой-то int, приведенный к типу указателя. В итоге функция получила адрес 0x100 (256). Естественно, по такому адресу она ничего читать не намерена. Передай в последний параметр вместо 0 адрес переменной типа SIZE_T - в эту переменную будет записано количество скопированных в буфер tuff байт памяти. И как ты увидишь, это значение будет равно 0. Твоя переменная tuff всегда равна нулю просто потому, что в нее ничего не записывается. Поскольку переменная глобальная, ее начальное значение всегда инициализируется нулем, а не случайным "мусором", как в случае с обычными переменными.
Похожие вопросы
- C++ и динамическая память: это приемлемо?
- Если приложение вызывает утечку памяти, то при завершение работы приложения динамическая память очиститься или нет?
- Устройство статических и динамических массивов в оперативной памяти (...)
- Программирование, динамическое выделение памяти в конструкторе класса
- Как компьютер определяет что в памяти записано знаковое или беззнаковое число?
- Leetcode. Обнулить строки и столбцы матрицы с константным потреблением памяти.
- Не правильное значение по адресу памяти c++
- Зачем освобождать память?
- Почему нельзя освободить выделенную память для элемента массива или как это сделать правильно?
- Как взять значение конкретного адреса в памяти?