Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 20:16   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Счастье Адрес переменной в ОЗУ

Всем привет!
У меня возник вопрос. Моя программа использует переменную, и при каждом запуске программы адрес этой переменной в ОЗУ меняется. Допустим первый раз я запустил прорамму и первая свободная ячейка (до запуска проги) находилась по адресу $00010000 (для простоты). А адрес переменнлой стал $00010005. Затем , допустим, я закрыл и открыл заново программу. До запуска первая свободная ячейка была $00020000. То следовательно адреc моей переменной будет $00020005???
Или я ошибаюсь???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 16.02.2013, 02:12   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Нет, не правильно. Почитайте о динамическом распределении памяти.
Каждый процесс грузится по новому адресному пространству и уже относительно него грузятся модули.

Адреса держите относительно физического файла(RVA преобразуйте в смещение в файле). И уже их преобразуйте в виртуальные.

Вот инфа исчерпывающая по вопросу: http://www.tech-juice.org/2011/02/21...fset-and-back/
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2013, 09:02   #3
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Спасибо!
Буду читать.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 16.02.2013, 16:28   #4
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Прочитал ту статью.
Мало что понял.
Есть подробная статья о том как программы сами определяют какая переменная есть какая, там что то было написано про статические указатели к переменным, но как это работает не очень понял???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 16.02.2013, 17:21   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Есть подробная статья о том как программы сами определяют какая переменная есть какая, там что то было написано про статические указатели к переменным, но как это работает не очень понял???
Хаха, в 80е может и были такие. Но после появления DNA ничего статического просто нет. Читайте про Dynamic Memory Allocation(DNA). При запуске процесс получает новую область памяти и все, абсолютно все имеет новые адреса в памяти. Единственное что есть это связь файла в памяти и на ЖД. Конвертируйте свой RVA адрес в File Offset. Ссылки уже приводились. Обратный процесс равносилен перевороту формулы.

И да, никогда не переводите переводчиком техническую документацию. Ещё больше ничего не поймете.
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2013, 18:34   #6
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
И да, никогда не переводите переводчиком техническую документацию. Ещё больше ничего не поймете
Хах. В точку попали, только при помощи переводчика и читаю анг. статьи. Просто мой английский ниже среднего.

File Offset = RVA - Section Virtual Offset + Section Raw Offset

Эту формулу понял.

Только странно. Создал свою прогу с одной переменной, которой при создании присвоил 555. Адрес переменной в памяти остался неизменной, как при нескальких перезапусках проги, так и при перезагрузке ПК.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 16.02.2013, 18:51   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Только странно. Создал свою прогу с одной переменной, которой при создании присвоил 555. Адрес переменной в памяти остался неизменной, как при нескальких перезапусках проги, так и при перезагрузке ПК.
Это потому, что вы из своей же проги этот адрес смотрите =)
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2013, 19:25   #8
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
Это потому, что вы из своей же проги этот адрес смотрите =)
Да нет, смотрю из ArtMoney.

Скачал File Location Calculator. С помощью всё той же ArtMoney вычислил адрес в памяти. Так вот, вопрос, какой адрес мне даёт ArtMoney: RVA,Section Virtual Offset,Section Raw Offset, а то я уже запутался савсем???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 16.02.2013, 19:32   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Артмани выдает 1-2 адреса. 1 из них это RVA.
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2013, 19:43   #10
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
1-2 адреса
Скорее 14-20
RVa- тоесть это адрес процесса , а не системы???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для public переменной класса присвоить адрес ячеек из внешней переменной _KUL Qt и кроссплатформенное программирование С/С++ 2 28.05.2012 12:04
Адрес переменной _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 16 30.12.2010 12:02
Адрес переменной _-Re@l-_ Общие вопросы .NET 3 25.12.2010 16:58
Адрес переменной kostyan777 Общие вопросы C/C++ 4 11.07.2010 22:16
Адрес переменной Pedro Общие вопросы Delphi 11 16.12.2008 13:03