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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2014, 16:56   #1
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию Адресация в C++, изменение адреса другой программы

Здравствуйте.

Сразу к делу.
Есть программа #1:
Код:
	long long int curr_time = time(0);
	int counter = 0;
	int zeta_prime = 100500;
	int *zp = &zeta_prime;
	for(;;)
	{
		counter = time(0)-curr_time;
		if(counter < 7) continue;
		//every 7 seconds
		counter = 0;
		curr_time = time(0);
		std::cout << zp << " - " << *zp << '\n';
	}
И есть программа #2:
Код:
	setlocale(LC_ALL,"");
	int *zp_force = (int*)0x29feb0;
	*zp_force = 100300;
	return 0;
Возникает три вопроса.

1) Почему когда я запускаю программу #1 два или более раз, адрес переменной zeta_prime всегда одинаков у всех трех экземпляров?
Подозреваю что потому, что адреса в памяти относительны, только не пойму относительно чего и как они выстраиваются.

2) Запускаю программу #1, там у переменной zeta_prime адрес памяти такой 0x29feb0, затем запускаю программу #2 и создаю указатель на этот самый адрес, после пытаюсь из программы #2 сменить значение, которое хранит этот адрес.
Но, не получается.
Подозреваю что опять-таки потому, то адреса относительны.(отсылка к вопросу 1)

3) Как реализовать то, что я хотел в вопросе 2 и что бы это работало?

Заранее спасибо за ответы/разъяснения.
DakotaZ вне форума Ответить с цитированием
Старый 26.08.2014, 19:22   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

1) Процессы грузятся на разное место в памяти

2) У каждого процесса свое адресное пространство - т.е. адрес 0х1234 в каждом процессе будет иметь свои данные.

3) Используя WriteProcessMemory()
waleri вне форума Ответить с цитированием
Старый 26.08.2014, 19:26   #3
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

1 на сколько я знаю адреса абсолютны. А вот по чему адреса всегда одинаковы сам бы хотел знать.
Цитата:
2) Запускаю программу #1, там у переменной zeta_prime адрес памяти такой 0x29feb0, затем запускаю программу #2 и создаю указатель на этот самый адрес, после пытаюсь из программы #2 сменить значение, которое хранит этот адрес.
Но, не получается.
Операционная система не даст изменить значение по произвольному адресу. Это прокатывало только до windows2000
SAMOUCHKA вне форума Ответить с цитированием
Старый 26.08.2014, 19:38   #4
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
1) Процессы грузятся на разное место в памяти

2) У каждого процесса свое адресное пространство - т.е. адрес 0х1234 в каждом процессе будет иметь свои данные.

3) Используя WriteProcessMemory()
1) Как тогда узнать их истинные адреса?
2) Как узнать адресное пространство текущего процесса?
DakotaZ вне форума Ответить с цитированием
Старый 26.08.2014, 20:06   #5
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Можно почитать "Windows via c++" Рихтера, для формирования общего представления.

Для межпроцессового общения ОС предоставляет различные механизмы. Можно воспользоваться библиотеками, например этой http://www.boost.org/doc/libs/1_56_0...erprocess.html
220Volt вне форума Ответить с цитированием
Старый 26.08.2014, 20:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как узнать адресное пространство текущего процесса?
А зачем?
WriteProcessMemory принимает хендл процесса. А далее уже относительные координаты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2014, 20:26   #7
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем?
WriteProcessMemory принимает хендл процесса. А далее уже относительные координаты.
Что бы сделать что-то типа ArtMoney
DakotaZ вне форума Ответить с цитированием
Старый 26.08.2014, 20:35   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от DakotaZ Посмотреть сообщение
Что бы сделать что-то типа ArtMoney
функцию вам назвали.
Цитата:
А вот по чему адреса всегда одинаковы сам бы хотел знать.
очевидно потому что данные грузятся в одно и тоже место адресного пространства.
ибо компилятор не мудрит, а по умолчанию базы обычно одни и те же.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.08.2014, 21:19   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что бы сделать что-то типа ArtMoney
Эта программа разве показывает абсолютный адрес?
Он относительный. Относительно процесса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2014, 21:55   #10
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Эта программа разве показывает абсолютный адрес?
Он относительный. Относительно процесса.
Ну с помощью относительного можно узнать абсолютный.
Это мне чисто для знаний.
DakotaZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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