![]() |
Pointer и все все все... :) Допустим есть глобальная переменная: var i:Integer; Тогда при запуске приложения ее адрес будет статическим на любой машине (поправьте если я не прав), вроде $00440055 и, если мне нужно поменять ее значение (или считать), я открываю процесс "OpenProcess" и делаю "WriteProcessMemory/ReadProcessMemory". Но если эта переменная - переменная класса/ячейка динамического массива/переменная загружаемой dll/... то ее адрес на разных машинах будет различный. Вопрос: Как узнать адрес этой переменной не зависимо от того, где запущено приложение? Возможно ли это в принципе? (берем в рассмотрение только более менее адекватные варианты :) ) |
ответ прост: найти в памяти чтото статичное (само по-себе и относительно нужной переменной) и от него отсчитывать позицию переменной. |
Не все так просто если объекты создаются динамически и размер динамического массива плавает. Такие задачи зачастую имеют корректное решение только при определенных условиях. И все перестает работать при очередном апдейте |
Да, да... это понятно. Все изменится в следующей версии ПО. Но по крайней мере так. Вот что еще не понятно: в Windows XP адрес нужной мне переменной всегда одинаков на конкретной машине, даже после перезагрузки. а вот в семерке - адрес меняется даже после перезапуска приложения! я в недоумении О_о |
3 ASLR |
2 Orange MoonЖ о. спс. не знал о таком. |
Да и в XP это могло быть не всегда так. В общем подобная задача неплохо решена в ArtMoney [url]http://www.artmoney.ru/rus.htm[/url] |
Текущее время: 01:15. Часовой пояс GMT +3. |