Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];
ВнизКак можно что то запихать в Exe файл? Найти похожие ветки
← →
k-sergey (2002-10-30 11:41) [0]Как можно что то запихать в Exe файл?
ну как бы сохранение данных программы в самом exe фйле...
Помогите кто знает...!
пишите на мыло k-sergey@mail.ru
← →
cutter-pro (2002-10-30 11:52) [1]Один из вариантов легкий, другой - трудный.
Трудный вариант: изучить структуру exe файла, заголовки, таблицы сегментов и т.д. и корректировать в необходимом месте, определяемом на основании выше приведенной информации.
Легкий вариант: объявить, например, типизированную константу с каким-нибудь предопределенным (редким:) значением типа 1234h, затем найти в файле смещение этой переменной, а зная смещение данных в файле, можно туда записывать все, что хочешь.
P.S. Это классический банальный подход (когда ничего другого в голову больше не приходит:). Естественно, есть и другие варианты и их практически бесконечное количество. Работало бы воображение.
← →
MegaVolt (2002-10-30 12:09) [2]Есть ещё один очень простой вариант но для него неужно иметь копию ехешника: Дописываем в конец ехешника то что вы хотите а далее например в самый конец дописываете ссылку на конец исходного ехешника. Работа с таким файлом возможна и из самого ехешника: первым делом лезем в конец файла-4 байта (размер integer) читаем указатель и далее перемещаемся в файле на позицию указанную в указателе и получаем начало наших данных.
← →
F1 (2002-10-30 12:34) [3]А как насчет того, что винды блокируют запущенный exe-шник даже на чтение???
← →
MegaVolt (2002-10-30 13:26) [4]А для чего я написал что необходимо иметь копию? А на счёт того что винды блокируют доступ даже на чтение это не совсем так :) Я собственноручно проверял совет который привёл выше покрайней мере по 98! Всё прекрасно извлекалось :)
← →
cutter-pro (2002-10-30 13:27) [5]>F1 Насчет блокировки на запись - это ты правильно подметил. Надо подумать... А вот насчет блокировки даже на чтение - позволю себе с тобой не согласиться - в w98se файл читается без проблем.
Насчет w95, wme, wnt, w2000, wxp - понятия не имею, да и честно говоря не имею желания пробовать.
← →
F1 (2002-10-30 14:00) [6]>MegaVolt (30.10.02 13:26)
>cutter-pro (30.10.02 13:27)
А я не знаю, как там в 98, а вот в 2000, XP сто пудово не работает даже чтение.
Хотя он ведь делается MemoryMapped, может быть его читать сразу из памяти, только вот где эта память???
Кстати, даже размер файла нельзя узнать :(
← →
KSergey (2002-10-30 14:10) [7]Люди!!! Есть же отличный способ и отличное место - ресурсы. Туда можно совершенно законно и стандартными методами пихать/читать все что угодно! Любые пользовательсие данные!
Лично мне известен только одино неудобство такого подхода: ресурся впихиваются на этапе линковки, понятно, и если пихать в ресурсы сильно большие данные (ну там 100Мб, например, а что?) - то при отладке надоедает ждать каждый раз перекомписяции/перелинковки. Ну тут выход наверное такой: отлаживем на небольшом объеме модельных данных, а как все готоро - пересобираем с реальными данными. В принципе любой из предложенных способов страдает тем же. Зато тут все законно ;)
← →
KSergey (2002-10-30 14:12) [8]> F1 © (30.10.02 14:00)
> А я не знаю, как там в 98, а вот в 2000, XP сто пудово не
> работает даже чтение.
Вранье наглое. Читать можно сколько угодно. (равно как и копировать внешними программами запущеный exe-шник)
← →
F1 (2002-10-30 14:16) [9]>KSergey © (30.10.02 14:10)
>ресурся впихиваются на этапе линковки
Как я понял, так не пойдет.
Я вот вспомнил, что у есть hInstance-указатель на начало спроецированного exe-шника в памяти процесса. А оттуда можно читать(насколько я знаю), а если нужно писАть, то в копию.
← →
F1 (2002-10-30 14:22) [10]>KSergey © (30.10.02 14:12)
>Вранье наглое. Читать можно сколько угодно
Согласен, стормозил, я пытался:
St:=TFileStream.Create(прям сам ехешник,fmOpenRead);
Так он меня отругал неподетски.
А о копировании как-то не подумал /:(
← →
KSergey (2002-10-30 16:44) [11]> F1 © (30.10.02 14:22)
> А о копировании как-то не подумал /:(
Да при чем тут, блин, копирование? Про копирование я сказал к тому, что при копировании файл необходимо прочитать, а раз копируется - значит и читать можно. Вот пример, наконец. Точно работает.
procedure TForm1.Button1Click(Sender: TObject);
var
FStream: TFileStream;
Buffer: PChar;
begin
GetMem(Buffer, 100);
try
FStream := TFileStream.Create(Application.ExeName, fmOpenRead + fmShareDenyNone);
try
FStream.Read (Buffer^, 99);
Memo1.Lines.Text := Buffer;
finally
FStream.Free;
end;
finally
FreeMem(Buffer);
end;
end;
Ну в Memo, понятно, не все 99 байт скопируются, но это уже отдельная тема. Факт в том, что сам exe-шник читает себя запросто.
← →
F1 (2002-10-30 16:48) [12]Все понятно!!!
Я когда так же делал не указал fmShareDenyNone
Вот меня и отругали неподетски.
← →
ЬупфМщде (2002-10-30 16:56) [13]Я же написал ясно и чётко что работает и именно так как написал KSergey. У меня приложение во время работы читает файл с ехешником в поток к нему дописывает всё что мне нужно и записывает под другим именем. А при запуске этого приложения оно автоматически извлекает данные из своего хвоста и исспользует их :)
← →
KSergey (2002-10-31 12:17) [14]Я до кучи сюда добавлю еще про чтение из ресурсов, т.к., по-моему, это наиболее правильно.
Путь таков (если кто не в курсе)
Делаем файл который надо в ресурсы запихать. Пусть, например, это будет какой-нибудь текст. Файл Text.txt. Потом в любом текстовом редакторе делаем файл text.rc следующего содержания:
TEXTDATA USERDATA Text.txt
Далее в командной строке набираем
brcc32.exe text.rc
Должно пройти без сообщений об ошибках. Ошибки - исправляем. В результате должен получиться компилрованный файл ресурсов Text.RES.
Теперь собственно кусок кода в дельфи:
....
implementation
{$R *.DFM} // это было
{$R Text.RES} // а вот эту строчку добавляем
....
procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: PChar;
ResStream: TResourceStream;
begin
GetMem(Buffer, 100);
try
ResStream := TResourceStream.Create(HInstance, "TEXTDATA", pChar("USERDATA"));
try
ResStream.Read (Buffer^, 100);
Memo1.Lines.Text := Buffer;
finally
ResStream.Free;
end;
finally
FreeMem(Buffer);
end;
end;
Ну тут я навернул через буфер - это чтобы показать, что куда то это все можно сгрузить. Для помещения в Memo по идее можно проще поступить. Но не в этом суть. Важно, что мы прочитали текст!
Еще один пример можно посмотреть http://people.alt.ru/computers/brsoft/delphi/DEL30.html
← →
k-sergey (2002-10-31 13:04) [15]Да....дискуссия...
а мне надо пример хотябы....например как сохранить значение какой-нибудь переменной программы после её завершения, в самом exe файле? киньте пример на мыло K-Sergey@mail.ru
← →
MegaVolt (2002-10-31 13:13) [16]А теперь как это всё сделать в реалтайме и для заранее не извесного текстового файла?
← →
Zemal (2002-10-31 13:18) [17]Что за хрень? От кого инфу прятать собрались? Зачем именно в экзэшник? Что? Текстового или ини-файла нехватает? Что вы спорите-то? Экзешник никак неполучится изменить, т.к. винды его блокируют на запись!!! Читать и запускать вторую копию - это пожалуста, а вот изменить, пока прога экспонирована в памяти, никак невыйдет... ну может быть и выйдет, если грохнуть ядро системы или как-то блокировать его, но это уже другая история... :). Вирусы что-ли писать надумали? К чему такой геморой?
← →
KSergey (2002-10-31 14:22) [18]> k-sergey (31.10.02 13:04)
> а мне надо пример хотябы....например как сохранить значение
> какой-нибудь переменной программы после её завершения, в
> самом exe файле? киньте пример на мыло K-Sergey@mail.ru
Да мне много что надо, и что?
Много раз саказано: нельзя так сделать. Ну НЕЛЬЗЯ! Единственный выход (вот если уж в exe-шник приспичило) - то надо еще один делать и его запускать, а он уже будет в первый дописывать как угодно (хоть и в ресурсы - примеры есть, см. интернет). Но, как верно заметил Zemal © (31.10.02 13:18) - а нафига?! Чем, напрмер, ini-файл не нравится? Хочется что-то спрятать - ну так зашифруйте в том же инишнике - вот и все!
Кто-то межет объяснить ценль? Может тогда и средство легче подберем, а?
← →
KSergey (2002-10-31 14:26) [19]> MegaVolt (31.10.02 13:13)
> А теперь как это всё сделать в реалтайме и для заранее не
> извесного текстового файла?
А интернет на что? Попадалось и такое. Правда компилятор нужен, но в принципе формат res-файлов думаю не бешено хитрый - прорвемся, если что.
Но не забудьте, что речь упорно про незапущеный exe-шник. А по другому - а нафиг оно надо?
← →
F1 (2002-10-31 14:31) [20]Чем с этим париться, лучше про криптографию почитай, и шифруй данные, которые ни кто не должен видеть :)
← →
KME (2002-10-31 14:39) [21]Зайдите на www.delphixfiles.narod.ru. Там все написано!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c