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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2014, 22:01   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от DakotaZ Посмотреть сообщение
Ну с помощью относительного можно узнать абсолютный.
Это мне чисто для знаний.
нет нельзя. и артмани его не показывает, он показывает адрес внутри адресного пространства процесса, а не абсолютный.
физический адрес(вы его называете абсолютным), всегда разнится, да и смысла в нем для вас нету.
а виртуальный адрес(вы его называли относительным), у каждого процесса свой.
но по сути, с помощью пары <Process ID>:<Address> мы можем попасть в любой адрес любого процесса.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.08.2014, 22:21   #12
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
1 на сколько я знаю адреса абсолютны. А вот по чему адреса всегда одинаковы сам бы хотел знать.
Адреса относительны. Относительны к "начальному" адресу куда загружен процесс, а вот этот адрес на Vista+ может менятся.

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
Операционная система не даст изменить значение по произвольному адресу. Это прокатывало только до windows2000
С этим никаких проблем, если конечно нет security ограничений.
waleri вне форума Ответить с цитированием
Старый 27.08.2014, 00:09   #13
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

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

Последний раз редактировалось f.hump; 27.08.2014 в 00:27.
f.hump вне форума Ответить с цитированием
Старый 27.08.2014, 09:17   #14
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

А я всегда думал что адреса абсолютные. Теперь понятно почему при каждом запуске показывает один и тот же адрес. Интересно, при запуске программы на разных машинах наверно то же адреса будут одинаковы или я не прав?
SAMOUCHKA вне форума Ответить с цитированием
Старый 27.08.2014, 10:32   #15
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
это индекс в таблицу логических сегментов (данные, код, константы, стек) и смещение относительно базового адреса сегмента. базовый адрес сегмента это индекс в таблицу трансляции страниц памяти, ну в таблице трансляции страниц лежит индекс страницы памяти (физический адрес).
Не совсем так. Сегменты нынче называются селекторами но в современных ОСях (по крайней мере Windows & linux на Интел платформах) имеет базовый адрес 0 и размер 2^32 (ну, или 2^64). Маппинг виртуального адреса в физический имеет место быть, но в данном случает это не имеет значения - все равно процесс не может обратится к *физическому* адресу.
Начиная с Vista процесс может быть загружен на разные начальные виртуальные адреса. В этом случае, адрес нужной переменной будет меняться. Это сделано именно с целью затруднить модификацию извне. Все зависит от флагов, с которыми был собран процесс.
waleri вне форума Ответить с цитированием
Старый 27.08.2014, 11:31   #16
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

в мануале Интел сегменты по прежнему называются сегментами:
Цитата:
To implement a basic flat memory model with the IA-32 architecture, at least two segment descriptors must be
created, one for referencing a code segment and one for referencing a data segment (see Figure 3-2). Both of
these segments, however, are mapped to the entire linear address space: that is, both segment descriptors have
the same base address value of 0 and the same segment limit of 4 GBytes.
Цитата:
More complexity can be added to this protected flat model to provide more protection. For example, for the paging
mechanism to provide isolation between user and supervisor code and data, four segments need to be defined:
code and data segments at privilege level 3 for the user, and code and data segments at privilege level 0 for the
supervisor. Usually these segments all overlay each other and start at address 0 in the linear address space. This
flat segmentation model along with a simple paging structure can protect the operating system from applications,
and by adding a separate paging structure for each task or process, it can also protect applications from each other.
Similar designs are used by several popular multitasking operating systems.
ну, и поскольку в 64-х битном режиме у проца есть глобальное адресное пространство в 2^64, сегментирование (дополнительный этап маппинга адресов) отключено на уровне железяки.
f.hump вне форума Ответить с цитированием
Старый 27.08.2014, 13:32   #17
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
нет нельзя.
Как же по Вашему тогда АртМани это делает?
Я же не говорю что я не знаю название процесса.
А если я знаю его название и знаю его относительный(виртуальный, как Вы его называете) адрес, то я свободно смогу узнать физический, или это не так?
DakotaZ вне форума Ответить с цитированием
Старый 27.08.2014, 13:35   #18
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
в некоторм смысле адреса относительны.
логический адрес (значение указателя) это индекс в таблицу логических сегментов (данные, код, константы, стек) и смещение относительно базового адреса сегмента. базовый адрес сегмента это индекс в таблицу трансляции страниц памяти, ну в таблице трансляции страниц лежит индекс страницы памяти (физический адрес). все это управляется менагером памяти проца и в некоторой степени системным манагером памяти. работать с физическими адресами напрямую не даст ни система ни проц.
да, манагер памяти проца предоставляет возможность настройки параметров доступа для логических сегментов и физических страниц. системный манагер использует фичи манагера проца для изоляции програм от системы и друг друга.
И как же по Вашему мнению физический адрес меняет программа ArtMoney?
DakotaZ вне форума Ответить с цитированием
Старый 27.08.2014, 13:38   #19
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В этом случае, адрес нужной переменной будет меняться. Это сделано именно с целью затруднить модификацию извне. Все зависит от флагов, с которыми был собран процесс.
Получается что виртуальные(относительные) адреса при каждом запуске будут разными?
Как же тогда работают программы трейнеры?
DakotaZ вне форума Ответить с цитированием
Старый 27.08.2014, 14:11   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

Цитата:
но по сути, с помощью пары <Process ID>:<Address> мы можем попасть в любой адрес любого процесса.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать значение адреса из памяти другой программы Xo66um Общие вопросы Delphi 3 23.09.2013 16:27
из адреса сайта взять id и подставить в код этой же страницы к другой ссылке ellada1 Помощь студентам 0 23.06.2012 12:21
Изменение адреса в iframe Lohmatiyy JavaScript, Ajax 1 03.06.2012 03:25
изменение ip адреса jeki0 Работа с сетью в Delphi 3 25.12.2011 22:21
Конфликт ip-адреса с другой системой в сети. Что это? spamer Свободное общение 4 04.10.2009 09:53