C/C++

Не правильное значение по адресу памяти c++

В чем ошибка? Почему я не могу получить нужное значение по адресу памяти?
Должно быть здоровье мое, а там число - мусор.

Virtual Memory Manager глубоко фиолетово на ваше здоровье! Он не обязан любому городскому сумасшедшему каждый раз выделять память по одному и тому же адресу. Даже если вы начнёте использовать QWORD или приведёте к допустимому значение адреса типа DWORD, вы всё равно, как правило, будете получать мусор, и в этом случае вам повезёт, либо иное допустимое значение и получите результат далёкий от ожидаемого, либо ваша программа предпримет попытку чтения данных вне пределов выделенного ей диапазона, за что и будет наказана.
Дмитрий Орёл
Дмитрий Орёл
80 770
Лучший ответ
Александр Грищенко а как тогда правильно и точно получить нужный адрес нужного значения?
Я пробовал в других программах, мусора не было
Дмитрий Орёл auto value = 75;
auto pointer = &value;
cout << "value: " << value << '\n';
cout << "address: 0x" << hex << pointer << '\n';
cout << "*pointer: " << dec << *pointer << '\n';
Александр Грищенко Это немного не то
Мне получается нужно, чтобы программа постоянно фиксировала изменение значения здоровья.
Да и проблема в том, что адрес отвечающий за здоровье выдаёт значение - мусор и я не понимаю почёму даётся это значение.
DWORD - это 32-битное целое. А 11-значное 16-ричное число 0x18294228f6c требует для своей записи 42 бита. В DWORD твоя константа никак не влезет. Необходимо либо использовать число, влезающее в 32 бита, либо использовать переменную life длиной 64 бита.
Игорь Потапов
Игорь Потапов
52 467
Александр Грищенко Тогда DWORD64 должен решить эту проблему, но этого не происходит...
dword life = 0x18294228f6c; // dword 0 .. 0xFFFFFFFF
if (life < 3000) cout << &life; // что это?
АL
Аlexander Leontev
25 445
Салават Фаизов Автору вопроса - у Вас вообще какая-то каша происходит.
Вы читаете по адреcу life из процесса в переменную value, как-бэ рассчитывая, что значение будет в value, но зачем-то дальше оперируете с адресом! (life), когда значение у Вас как-бэ в value.
cout << &life - выведет ВНЕЗАПНО указатель на life (которая и так по сути у Вас видимо адрес)
  Теперь понятно, что Вы вскрыли код какой-то игровой программы и нашли в нём значение, которое приняли за уровень здоровья.

  Однако, код программы вполне может быть распределён по нескольким модулям: один из них — .EXE и ещё один или несколько — .DLL. И, конечно же, после старта игры все они должны быть загружены в память.

  Вот только какое место в памяти займёт каждый модуль — это невозможно предугадать. Поэтому адрес Вашей ячейки может от раза к разу блуждать. Вывод — не привязывайтесь к конкретному адресу. Если Вы всё ещё хотите модифицировать Здоровье, то придётся каждый раз вскрывать код, заново находить Здоровье и сразу вписывать новое значение. По другому — никак!!!
Александр Грищенко Да, конечно
Я понимаю это, но все же это происходит в любом случае
Александр Грищенко Cheat Engine говорит по адресу этому находится здоровье и его значение
а отладчик в VS говорит, что там мусор
Я хотел ответить, но меня опередили, я проверил все ответы, и да они правильные, все как надо все правильно.

Я не знаю гуглил ли ты но нашел статейку, по гуглу.

habr.com/ru/post/93437/ я думаю должна помочь.
или еще гугл сканер памяти с++.

Может скажешь че конкретно нужно сделать сам тоже постараюсь.

может еще.
cyberforum.ru/cpp-beginners/thread1529320.html
Саша Бойко
Саша Бойко
1 143
Александр Грищенко Мне не нужно менять значение в памяти, мне нужно просто прочитать его и получить значение, которое находится по этому адресу