|     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 |   |  
 Интернет-форум Краснодарского края и Краснодара |