откуда: Минск, Беларусь
был: 08.05.2006, 09:20
с нами с: 13.05.2003
сообщений: 104
Группы:
Нет
07.12.2003 02:18 Найти себя в памяти
Требуется найти адрес по которому загружена выполняемая программа. Т.е. надо чтобы программа нашла сама себя (свой адрес). Сойдет и значение регистра PC - только как его ззбрать из регистра в переменную? _________________ Кактус
В Palm'е исполнение программы происходит на прямо на месте, тоесть она никуда не загружается, так как память для хранения и исполнения одна и та же. Так что задача сводится к тому,чтобы найти свою БД, это можно сделать через функцию DmFindDatabase, а потом нужно взять ресурс code #1, это ресурс содержащий точку входа. Это можно сделать с помощью функции DmGetResource.
Если хочеться можно и PC регистр взять, то что-то вроде этого
static asm UInt32 a()
{
move.l pc, d0
rts
}
но у меня CW ругается на pc... честно говоря уж не помню, как это делать точно
откуда: Мать городов русских
был: 16.02.2010, 12:05
с нами с: 22.04.2003
сообщений: 112 +3
Группы:
Нет
11.12.2003 11:25 Re: Найти себя в памяти
Cactus писал(а):
Требуется найти адрес по которому загружена выполняемая программа. Т.е. надо чтобы программа нашла сама себя (свой адрес). Сойдет и значение регистра PC - только как его ззбрать из регистра в переменную?
Интересно, а зачем это тебе нужно?
Хочешь попытаться в программе изменить собственный код?
Тогда вопрос к всезнающемму ОЛЛ - а можно ли это сделать в прЫнципе?
Какие будут предложения?
Можно ли таким путем защищать свои проги от не санкционированного копирования? _________________ Работа в команде очень важна, она позволяет свалить вину на другого.
Есть один из способов защиты, когда некий код после компиляции шифруется, а на выполнение он попадает после де-шифрования. Вот для таких целей как раз и нужно знать откель стартовала процедура. Плюсы этого способа в том, что дизасмом его не возмешь.
оценка сообщения: нейтрально
Использует: Sony PEG NX80V, MemoryStick Pro Sony 256Mb, Nokia6310i
Да нет. Де-шифрование происходит не прямо в prc-шнике, а т.е. физически мы его не изменяем. Оно происходит через переменную памяти. Т.е. сичтали кодированный сегмент кода в некий ссылочный тип, раскодили, определили тип типа функция, сделали преоброзование с присвоением и запустили полученное. Вобщем в кратце где-то так.
оценка сообщения: нейтрально
Использует: Sony PEG NX80V, MemoryStick Pro Sony 256Mb, Nokia6310i
Вообще задача для Palm'а как раз очень подходящая, у него все равно есть доступ к любому адресу памяти (никакого тебе защищенного режима, пока что). А насчет шифровать и расшифровывать - будет одна Большая проблема - настраиваемые JMP'ы между сегментами... они будут все херить, так как при запуске программа их настроет, тоесть изменит шифрованную часть. Может конечно насчет этого я и не прав, но что-то очень похожее должно таки происходить...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах