![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить данные в .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]
Из этого же процесса не возможно, файл залочен для записи пока приложение работает.