Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 31.05.2012, 23:48
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Кошмар.
Сделай файл конфигурации и сохрани туда это слово. При запуске - прочти.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #17  
Старый 01.06.2012, 00:16
Giku Giku вне форума
Прохожий
 
Регистрация: 23.05.2012
Сообщения: 14
Репутация: 10
По умолчанию

без реестра и без .ini файла
изменить exeшник
Ответить с цитированием
  #18  
Старый 01.06.2012, 00:19
Giku Giku вне форума
Прохожий
 
Регистрация: 23.05.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Кошмар.
Сделай файл конфигурации и сохрани туда это слово. При запуске - прочти.
идея хорошая но мне нужна портативная версия
я где то прочитал что теоретически можно изменить exeшник. возможно или нет ?
Ответить с цитированием
  #19  
Старый 01.06.2012, 00:27
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Можно конечно. Открой "блокнотом" или любым шестнадцатеричным редактором и меняй.
Прикол в том, что таким способом (менять прямо в екзешке) строку можно будет заменить только на строку длины такой же или меньше. Для этого понадобится найти строку в файле (прошерстить файл), поменять строку, на конце поставить "ноль" и поменять длину строки, которая идет перед ней в четырех байтах (integer или DWORD, не знаю). При желании можно и на строку большей длины поменять, но это придется прочитать и переделать СТОЛЬКО, что, имхо, еще рано в это соваться (может понадобиться переделать многие обращения к переменным в машинном коде программы, а может даже переделать секции).
Не понимаю, чем файл конфигурации так мешает. Его можно распространять вместе с программой. Все известные мне "Portable" проги сохраняют свою конфигурацию либо в реестре, либо в дополнительных файлах.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 01.06.2012 в 00:32.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Giku (01.06.2012)
  #20  
Старый 01.06.2012, 02:19
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Вообще этот код уже раз сто на этом форуме кидал.
Конечно, данный код применять не желательно, но это Вам решать
Код:
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;
__________________
Помогаю за Спасибо
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо v1s2222 за это полезное сообщение:
Giku (01.06.2012), KuHoMaH (01.06.2012)
  #21  
Старый 01.06.2012, 09:13
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В принципе можно и полноценный конпелятор наваять, там не очень сложно (хотя есть свои камни приткновения). В разделе исходников есть примерчик "Компилятор Бейсика" чтоли.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
KuHoMaH (01.06.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter