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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 19:51   #11
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

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

Вообще-то все эти адреса относятся к Relative Virtual Address(RVA)=) вспомнил какие 2 адреса выдает артмани - Virtual Address и Relative Virtual Address.

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

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

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

Прочитал эту статью, и не только её
http://citforum.ru/operating_systems/sos/glava_7.shtml

Цитата:
Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так как во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся в компьютере.

Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами. В первом случае замену виртуальных адресов на физические делает специальная системная программа - перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных данных о начальном адресе физической памяти, в которую предстоит загружать программу, и информации, предоставленной транслятором об адресно-зависимых константах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими.

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

в PE редакторе смотрите.
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2013, 17:46   #17
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

А моё предположение из 13 поста верно???

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

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

Базовый адрес прописан в PE заголовке(DosHeader).e_lfanew + 00000028h = Точка входа.

Цитата:
Я правильно понял???
Не совсем так.

Загрузочник проецирует EXE(секцию кода и ресурсы) в память, но есть одно НО. В память загружается только те участки кода, которые нужны в текущий момент времени. Инначе даже 2х ГБ ОЗУ не хватило бы чтобы ОС запустить.

Потому EXE нельзя удалить/изменить когда он работает. Система не теряет связи между образом программы на ЖД и в ОЗУ. По мере надобности в память догружаются нужные участки кода. И высвобождаются не используемые. По этому память разделена на страницы а они поделены на регионы(блоки). В этом суть DMA(ну или я так понимаю).

Пример:
У тебя есть адрес 0xFFFFFFFD там жизнь игрока(от 0 до 100). Этот адрес существует только тогда, когда загружен уровень, или вообще, когда игрок только жив.

Последний раз редактировалось Человек_Борща; 17.02.2013 в 18:38.
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2013, 18:29   #20
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

А с ArtMoney та что??
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
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