К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Pointer и все все все... :)

Гость
0 - 17.05.2012 - 23:30
Допустим есть глобальная переменная:
var i:Integer;

Тогда при запуске приложения ее адрес будет статическим на любой машине (поправьте если я не прав), вроде $00440055 и, если мне нужно поменять ее значение (или считать), я открываю процесс "OpenProcess" и делаю "WriteProcessMemory/ReadProcessMemory".

Но если эта переменная - переменная класса/ячейка динамического массива/переменная загружаемой dll/... то ее адрес на разных машинах будет различный.

Вопрос: Как узнать адрес этой переменной не зависимо от того, где запущено приложение?

Возможно ли это в принципе? (берем в рассмотрение только более менее адекватные варианты :) )



Гость
1 - 18.05.2012 - 16:52
ответ прост: найти в памяти чтото статичное (само по-себе и относительно нужной переменной) и от него отсчитывать позицию переменной.
Гость
2 - 18.05.2012 - 20:38
Не все так просто если объекты создаются динамически и размер динамического массива плавает. Такие задачи зачастую имеют корректное решение только при определенных условиях. И все перестает работать при очередном апдейте
Гость
3 - 18.05.2012 - 21:23
Да, да... это понятно. Все изменится в следующей версии ПО. Но по крайней мере так.

Вот что еще не понятно:
в Windows XP адрес нужной мне переменной всегда одинаков на конкретной машине, даже после перезагрузки.
а вот в семерке - адрес меняется даже после перезапуска приложения! я в недоумении О_о
Гость
4 - 19.05.2012 - 07:48
3 ASLR
Гость
5 - 19.05.2012 - 10:13
2 Orange MoonЖ о. спс. не знал о таком.
Гость
6 - 19.05.2012 - 16:28
Да и в XP это могло быть не всегда так. В общем подобная задача неплохо решена в ArtMoney http://www.artmoney.ru/rus.htm


К списку вопросов






Copyright ©, Все права защищены