Форум: "KOL";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
ВнизЗапуск приложения, хранящегося в ресурсах средствами API Найти похожие ветки
← →
YDS (2006-06-09 11:08) [0]Средствами Delphi сабж реализуется посредством конструкции вида:
Res := TResourceStream.Create(Hinstance, "My.exe", Pchar(EXEFILE));
Res.SavetoFile("My.exe");
Однако при этом нужно подвязывать в uses Classes, что увеличивает размер конечного exe килобайт на 80.
Как это можно обойти средствами API или KOL?
← →
ECM © (2006-06-09 11:23) [1]
> Как это можно обойти средствами API или KOL?
1) KOL - использовать Resource2Stream:function Resource2Stream( DestStrm : PStream; Inst : HInst;
ResName : PChar; ResType : PChar ): Integer;
{* Loads given resource to DestStrm. Useful for non-standard
resources to load it into memory (use memory stream for such
purpose). Use one of following resource types to pass as ResType:
|<pre>
RT_ACCELERATOR Accelerator table
RT_ANICURSOR Animated cursor
RT_ANIICON Animated icon
RT_BITMAP Bitmap resource
RT_CURSOR Hardware-dependent cursor resource
RT_DIALOG Dialog box
RT_FONT Font resource
RT_FONTDIR Font directory resource
RT_GROUP_CURSOR Hardware-independent cursor resource
RT_GROUP_ICON Hardware-independent icon resource
RT_ICON Hardware-dependent icon resource
RT_MENU Menu resource
RT_MESSAGETABLE Message-table entry
RT_RCDATA Application-defined resource (raw data)RT_STRING String-table entry
RT_VERSION Version resource
|</pre>
|<br>For example:
!var MemStrm: PStream;
! JpgObj: PJpeg;
!......
! MemStrm := NewMemoryStream;
! JpgObj := NewJpeg;
!......
! Resource2Stream( MemStrm, hInstance, "MYJPEG", RT_RCDATA );
! MemStrm.Position := 0;
! JpgObj.LoadFromStream( MemStrm );
! MemStrm.Free;
!......
}
2) API - подсмотреть реализацию функции Resource2Stream в KOL :)
← →
ECM © (2006-06-09 11:26) [2]З.Ы. у MemoryStream есть метод SaveToFile
← →
YDS (2006-06-09 11:46) [3]Thks!!!!!
← →
YDS (2006-06-09 21:40) [4]Sorry, но снова туплю :(
Задача стоит простая: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла.
Делаю так:
var
pFile, MemStrm: PStream;
cFile :string; // имя файла, в который нужно записать
begin
MemStrm := NewMemoryStream;
Resource2Stream(MemStrm,HInstance,"AD",RT_RCDATA); // читаю ресурс
pFile := NewReadWriteFileStream(cFile); // открваю файл на запись
SeekFileStream(pFile, 0, spEnd); // прыгаю в его конец
WriteFileStream(pFile, MemStrm^, GetSizeMemStream(MemStrm)); // пишу
MemStrm.free;
pFile.free;
end;
В итоге, сначала в конец файла записываются какие-то 96 байт, а уж затем содержимое ресурса. Что тут не так?
← →
YDS (2006-06-09 22:05) [5]Все, разобрался. Нужно примерно так:
var
pFile, MemStrm: PStream;
cFile :string; // имя файла, в который нужно записать
mBuffer : array[0..1929] of byte;
begin
MemStrm := NewMemoryStream;
Resource2Stream(MemStrm,HInstance,"AD",RT_RCDATA);
MemStrm.Position := 0;
MemStrm.Read(mBuffer,SizeOf(mBuffer));
SeekFileStream(pFile, 0, spEnd);
pFile.Write(mBuffer,SizeOf(mBuffer));
MemStrm.free;
pFile.free;
end;
← →
RA © (2006-06-13 09:40) [6]Задача стоит простая: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла.
Вирусописатели непобедимы.
← →
YDS (2006-06-14 20:01) [7]
> Вирусописатели непобедимы.
Не угадал :) Просто есть консольная тулза, которой таким образом проще добавить функциональность, сделав все при этом в виде одного exe.
← →
YDS (2006-06-14 20:09) [8]Sorry, предыдущим постом я пояснил, что хотел упаковать в ресурс exe для последующего его запуска оттуда.
А вот что касается "задачи: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла", то это не для вируса, а для патчера - патчится файл путем прикручивания к нему дополнительной секции, код которой сидит в ресурсе патчера.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.063 c