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