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

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

Как можно зашить в программу dll? [D7]


hgd ©   (2004-11-03 09:18:00) 

У меня в программе используются dll, я хочу чтобы они были в программе "зашиты". Как можно зашить в программу dll?


Игорь Шевченко   (2004-11-03 23:27:00) [1]


> Та утилита непосредственно секции исполняемого кода EXE
> модифицировала добавляя код DLL и переставляя все вызовы
> функций DLL на адреса функций в теле того же EXE


И настраивая relocations в самой DLL ? Неслабая работа, однако.

А вот в блаженной памяти операционных системах для EC ЭВМ такие фокусы можно было довольно легко проделать на уровне линкера, благо формат EXEшников позволял...


Sergey_Masloff   (2004-11-03 21:43:00) [2]

Sergey_Masloff   (03.11.04 17:08) [12]
>согласишься ведь
куда я денусь...


Digitman   (2004-11-03 17:15:00) [3]


> хм... а толку? Ты ж в ресурс управление не передашь?


а наЩет передачи какого-то там "управления" речи в вопросе не шло ... звыняйте уж) ... "зашить" - это одна опера,  передать какое-то там куда-то там "управление" - совершенно иная опера ... согласишься ведь 7


Sergey_Masloff   (2004-11-03 17:08:00) [4]

Digitman ©   (03.11.04 10:07) [11]
>все равно же блажь ..
Чистейшей воды
>но уж если на то пошло, то и утилит никаких не нужно, >достаточно сформировать ресурс, содержащий бин.образ
хм... а толку? Ты ж в ресурс управление не передашь?
Та утилита непосредственно секции исполняемого кода EXE модифицировала добавляя код DLL и переставляя все вызовы функций DLL на адреса функций в теле того же EXE. Вобщем, еще тот изврат  но видел лично. Правда, такого функционала мне не нужно было поэтому не экспериментировал сам.


Digitman   (2004-11-03 10:07:00) [5]


> Sergey_Masloff   (03.11.04 09:57) [9]


все равно же блажь .. но уж если на то пошло, то и утилит никаких не нужно, достаточно сформировать ресурс, содержащий бин.образ


1008   (2004-11-03 10:05:00) [6]

Можно, например, порыться тут: http://www.delphiworld.narod.ru/

Я там нашёл следующее: Добавить данные в EXE файл и получить их
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);
   // seek to end of File
   // ans Ende der Datei Seeken
   aStream.Seek(0, soFromEnd);
   // copy data from MemoryStream
   // Daten vom MemoryStream kopieren
   aStream.CopyFrom(MemoryStream, 0);
   // save Stream-Size
   // die Streamgro?e speichern
   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);
   // seek to position where Stream-Size is saved
   // zur Position seeken wo Streamgro?e gespeichert
   aStream.Seek(-SizeOf(Integer), soFromEnd);
   aStream.Read(iSize, SizeOf(iSize));
   if iSize > aStream.Size then
   begin
     aStream.Free;
     Exit;
   end;
   // seek to position where data is saved
   // zur Position seeken an der die Daten abgelegt sind
   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;

Может есть ещё чего, но искать лень.


Sergey_Masloff   (2004-11-03 09:57:00) [7]

Digitman ©   (03.11.04 09:45) [7]
>ты хоть бы сподобился что ли пояснить. что конкретно ты >подразумеваешь под термином "зашить" ... и по какому поводу >тебя посетила сия блажь ...
Бинарный код DLL вшить в EXE видимо. Видимо, частично избежать DLL HELL хочет. И не одинок он в этом, и даже есть утилита чуть ли не в MS Platform SDK которая это делает. Насчет Platform SDK могу наврать но что есть такое чудо - 100%


Reindeer Moss Eater   (2004-11-03 09:47:00) [8]

тоесть dll переименовать в pas?

переименовать это F6, а не Shist+F4


Digitman   (2004-11-03 09:45:00) [9]


> hgd


ты хоть бы сподобился что ли пояснить. что конкретно ты подразумеваешь под термином "зашить" ... и по какому поводу тебя посетила сия блажь ...


hgd   (2004-11-03 09:42:00) [10]

тоесть dll переименовать в pas?


Reindeer Moss Eater   (2004-11-03 09:35:00) [11]

Конечно можно.
Запускаем FAR и жмем Shift+F4. Вводим имя файла.


hgd   (2004-11-03 09:34:00) [12]

ой... а можно создать такой pas модуль, если есть только dll


Reindeer Moss Eater   (2004-11-03 09:30:00) [13]

Нет.
Так dll просто "пришьется" к программе.
А если хочешь её "зашить", надо в uses включать *.pas модули этой длл.


hgd   (2004-11-03 09:22:00) [14]

спасибо, а как просто написать
uses mydll.dll ?


Reindeer Moss Eater   (2004-11-03 09:19:00) [15]

включи модули dll в uses своей программы


Наверх

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