Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить данные в .EXE файле [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Morg ©   (2003-10-20 13:08:00) 

Пример: есть exe файл (Написанный на Delphi), в котором есть данные (Const = "123" . К примеру), как их изменить из этой же программы (Const = "321").


Mystic   (2003-10-20 14:49:00) [1]

> Они работают, как макроподстановка (грубо говоря, во время компиляции все вхождения в исходном тексте Const заменяются на "123"), то есть под нетипизированую константу память не распределяется, и ее изменить нельзя.

Да нет, строковые константы лежат в cекции данных. Константные строки храняться следующим образом: длина, счетчик ссылок=$FFFFFFFF, собственно сама строка + #0. В принципе найти эту строку и поменять можно (переустановить атрибуты страницы, ...). Сделать длиннее практически невозможно.

const
Dummy = "123";

var
St: string;
P: Pointer;
begin
St := Dummy;
P := Pointer(St);
// P указыает сейчас на
// FF FF FF FF 03 00 00 00 31 32 33 00
// ^
// Устанавливаем нужные атрибуты страницы...
PChar(St)^ := "0";
end;


Digitman   (2003-10-20 14:43:00) [2]

сабж из разряда трюков


clickmaker   (2003-10-20 14:07:00) [3]

> Morg (20.10.03 14:03) [4]

Есть еще такая вещь как реестр...


Brahman   (2003-10-20 14:07:00) [4]

Действительно - зачем Registry, всякие там ини-файлы, тем более базы данных.
Пиши все подряд в exe


Morg   (2003-10-20 14:03:00) [5]

Тогда как реализовать:
User ввел данные в Memo1 и закрыл приложение. Когда он откроет это приложение в следуйщий раз, то в Memo1 останутся те изменения что он сделал в прошлый раз.

Как это сделать в рамках одного файла !!! (Не записывать данные в другой файл, а потом загружать)


Ihor Osov'yak   (2003-10-20 13:57:00) [6]

Да, и учитывая [1] и [2] - вопрос задан некорректно, так как допускает неоднозначную интерпретецию.. Хотя формально [1] - более правильная интерпретация.. Если, конечно, не учитывать того факта, что непипизированная константа "размазана" по телу ехе-файла, а если и перейти к типизированной константе, то я бы сразу задал вопрос - а зачем?


Ihor Osov'yak   (2003-10-20 13:53:00) [7]

Const = "123" - это нетипизированные константы.
Они работают, как макроподстановка (грубо говоря, во время компиляции все вхождения в исходном тексте Const заменяются на "123"), то есть под нетипизированую константу память не распределяется, и ее изменить нельзя.
Если необходимость в изменении константы возникает, то нужно использовать типизированную константу, или инициализированную глобальную переменную (с начальным значением) (не знаю, в каком делфи начали поддерживаться инициализированные глобальные, но в пятом уже точно есть)


ZeroDivide   (2003-10-20 13:50:00) [8]

Из этого же процесса не возможно, файл залочен для записи пока приложение работает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо