|
#16
|
||||
|
||||
Кошмар.
Сделай файл конфигурации и сохрани туда это слово. При запуске - прочти. jmp $ ; Happy End! The Cake Is A Lie. |
#17
|
|||
|
|||
без реестра и без .ini файла
изменить exeшник |
#18
|
|||
|
|||
Цитата:
я где то прочитал что теоретически можно изменить exeшник. возможно или нет ? |
#19
|
||||
|
||||
Можно конечно. Открой "блокнотом" или любым шестнадцатеричным редактором и меняй.
Прикол в том, что таким способом (менять прямо в екзешке) строку можно будет заменить только на строку длины такой же или меньше. Для этого понадобится найти строку в файле (прошерстить файл), поменять строку, на конце поставить "ноль" и поменять длину строки, которая идет перед ней в четырех байтах (integer или DWORD, не знаю). При желании можно и на строку большей длины поменять, но это придется прочитать и переделать СТОЛЬКО, что, имхо, еще рано в это соваться (может понадобиться переделать многие обращения к переменным в машинном коде программы, а может даже переделать секции). Не понимаю, чем файл конфигурации так мешает. Его можно распространять вместе с программой. Все известные мне "Portable" проги сохраняют свою конфигурацию либо в реестре, либо в дополнительных файлах. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 01.06.2012 в 00:32. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Giku (01.06.2012)
|
#20
|
||||
|
||||
Вообще этот код уже раз сто на этом форуме кидал.
Конечно, данный код применять не желательно, но это Вам решать Код:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit; try aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); MemoryStream.Seek(0, soFromBeginning); aStream.Seek(0, soFromEnd); aStream.CopyFrom(MemoryStream, 0); iSize := MemoryStream.Size + SizeOf(Integer); aStream.Write(iSize, SizeOf(iSize)); finally aStream.Free; end; Result := True; end; function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit; try aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); aStream.Seek(-SizeOf(Integer), soFromEnd); aStream.Read(iSize, SizeOf(iSize)); if iSize > aStream.Size then begin aStream.Free; Exit; end; aStream.Seek(-iSize, soFromEnd); MemoryStream.SetSize(iSize - SizeOf(Integer)); MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); MemoryStream.Seek(0, soFromBeginning); finally aStream.Free; end; Result := True; end; //Запись: var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; Memo1.Lines.SaveToStream(aStream); if not FileExists('111.exe') then showmessage('error!!!'); AttachToFile('111.exe', aStream); aStream.Free; end; //Чтение: var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; if not FileExists('111.exe') then showmessage('error!!!'); LoadFromFile('111.exe', aStream); Memo1.Lines.LoadFromStream(aStream); aStream.Free; end; Помогаю за Спасибо |
#21
|
||||
|
||||
В принципе можно и полноценный конпелятор наваять, там не очень сложно (хотя есть свои камни приткновения). В разделе исходников есть примерчик "Компилятор Бейсика" чтоли.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
KuHoMaH (01.06.2012)
|