Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
#1

Как найти переменную в памяти? - C++

11.01.2013, 17:46. Просмотров 959. Ответов 6
Метки нет (Все метки)

Доброго времени суток

Допустим, объявлена переменная int
C++
1
int r=58;
У этой переменной можно узнать адрес
C++
1
cout<<&r;
Как посмотреть значение по этому адресу в hex-редакторе? Пробовал через ArtMoney посмотреть значение по этому адресу в процессе, но там показывает неправильно, а должно показывать 58. Есть ли способ проследить это значение с помощью редактора?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 17:46     Как найти переменную в памяти?
Посмотрите здесь:
Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? C++
C++ Выделение памяти под переменную
Выделение памяти под переменную в структуре C++
C++ Сколько памяти выделяется под структурную переменную
C++ Можно ли создать в C++ ограниченную переменную (для экономии памяти) без использования классов
Как найти не только числовую информацию в памяти процесса ? C++
C++ Процедура, записывающая в переменную X минимальное из значений X и Y, а в переменную Y – максимальное
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
11.01.2013, 18:25     Как найти переменную в памяти? #2
ViktorKozlov,
В файле и в памяти значения адресов разные (т.к. секции в памяти выраниваются по 4Кб границам (обычно), а в файле - по 512-байтным (размер сектора диска). Это раз.
Автоматическую переменную (стековую) в файле не найдешь, т.к. она получается динамически в зависимости от того, куда система загрузит модуль и разместит стек. Само значение 58 скорее всего будет прям в коде.
Статические и глобальные переменные в файле есть в секции инициализированных данных (хотя тут от оптимизации компилятором зависит и от того, действительно ли они инициализируются литералом).
1) Найти ее можно, определив ее адрес на этапе выполнения, и вычесть из него адрес начала секции в памяти (есть в заголовке PE). Потом вычесть ImageBase (тоже в заголовке PE).
2) Потом найти смещение секции в файле (для этого нужно посмотреть PE заголовок) и прибавить полученное на первом этапе смещение...

Стоп, или нужно именно в процессе, а не в файле? Тогда должно быть именно по этому адресу.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
11.01.2013, 18:30     Как найти переменную в памяти? #3
Адрес переменной, выводимый в cout, пригоден для использования в ArtMoney без каких-либо смещений, напрямую.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
11.01.2013, 18:37     Как найти переменную в памяти? #4
Если в процессе, то конечно должно быть там же...
Миниатюры
Как найти переменную в памяти?  
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
11.01.2013, 18:49  [ТС]     Как найти переменную в памяти? #5
Цитата Сообщение от WhiteP Посмотреть сообщение
или нужно именно в процессе, а не в файле?
Нужно в процессе, но через ArtMoney почему-то не получается. Там показывает или 0, или крестики, хотя должно быть 58
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
11.01.2013, 18:57     Как найти переменную в памяти? #6
У меня все как надо. Да и не может быть иначе.
Миниатюры
Как найти переменную в памяти?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 19:39     Как найти переменную в памяти?
Еще ссылки по теме:
Как объявить 10 значную переменную такой как 9876543210 C++
C++ Как объявить переменную, как диапазон чисел
C++ как преобразовать в переменную
C++ как извлечь из for переменную?
C++ Как обновить переменную?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
11.01.2013, 19:39     Как найти переменную в памяти? #7
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Нужно в процессе, но через ArtMoney почему-то не получается. Там показывает или 0, или крестики, хотя должно быть 58
- это твоя картинка? Так 3A16=5810
Yandex
Объявления
11.01.2013, 19:39     Как найти переменную в памяти?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru