Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Склеивание и расклеивание .exe файлов


Автор: ShadowDancer 23.6.2006, 09:36
Читал про Joiner'ы. Вот в этой: http://senselogic.jino-net.ru/coding/delphi/?subj=net&mod=joiner.php.htm статье описывается как склеить файл.
А как тому файлу который приклеивают (stub), узнать и отделить от себя прикрёплённый файл ?
Сразу говорю: не троян, просто интерес. 

Автор: Snowy 23.6.2006, 09:52
А ему и не нужно знать.
Всю работу выполняет третий файл, который и обеспечивает расклеивание, приклеенных к нему двух других.
Задача и состоит в том, чтобы написать этот третий (точнее первый) файл. 

Автор: ShadowDancer 23.6.2006, 10:01
А как будет выглядеть тот файл, что отклеивает ? Что он должен делать ? 

Автор: Snowy 23.6.2006, 10:09
Он должен знать количество файлов, их размеры и где именно они находятся.
После этого, он загружает их в память и запускает.

А чтобы это работало, нам нужна программа, которая будет создавать склеенный файл и записывать в него эти размеры и местонахождение. 

Автор: ShadowDancer 23.6.2006, 10:33
Цитата(Snowy @  23.6.2006,  10:09 Найти цитируемый пост)
создавать склеенный файл и записывать в него эти размеры и местонахождение

Вот, вот. А где про это почитать. 
Или пример, если не сложно.
 

Автор: Snowy 23.6.2006, 10:39
Справка по TFileStream тебе в руки.
Склеить 3 файла в один - самое простое.
Основную работу выполняет лаунчер. Вот тут всё гораздо сложнее... 

Автор: ShadowDancer 23.6.2006, 10:50
Цитата(Snowy @  23.6.2006,  10:09 Найти цитируемый пост)
Он должен знать количество файлов, их размеры и где именно они находятся.

С пощью TFileStream вроде бы нельзя этого сделать. Или я ошибаюсь ? 
Если нет, то как это сделать ? 

Автор: ShadowDancer 23.6.2006, 11:06
Цитата(ShadowDancerNew @  23.6.2006,  10:50 Найти цитируемый пост)
Цитата(Snowy @  23.6.2006,  10:09 )
Он должен знать количество файлов, их размеры и где именно они находятся.


С пощью TFileStream вроде бы нельзя этого сделать. Или я ошибаюсь ? 
Если нет, то как это сделать ?  


Я имел ввиду ни как узнать, а как установить кол-во файлов и их размеры. 

Автор: Alexeis 23.6.2006, 13:58
ShadowDancerNew, Очевидо, что эти данные должна записать программа "склеиватель" первыми в результирующий файл, затем программа "расклеиватель" прочетает все указанные поля в том же порядке. Ведь структуру "гибрида" содаешь сам, так ни что не мешает менять ее по своему вкусу. 

Автор: ShadowDancer 25.6.2006, 01:00
Как пользуясь этим кодом прочитать из test_IN.exe первые 10000 байт и записать в tert_OUT.exe ? :
Код

var
  FromF, ToF: file;
  NumRead, NumWritten,Size: LongInt;
  Buf: array[1..2048] of Byte;
            //f: textfile;
begin
try
          //AssignFile(F,'size.txt');
          //Rewrite(f);
    AssignFile(FromF,'test_IN.exe');
    Reset(FromF, 1);
    AssignFile(ToF,'test_OUT.exe');
    Reset(ToF, 1);
    Size:=filesize(FromF);
          //Writeln(F, Size);
          //Close(f);
    //filesize(ToF)
    Seek(ToF,filesize(ToF));
          repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
    blockwrite(ToF,Size,sizeof(longint));
  finally
    CloseFile(FromF);
    CloseFile(ToF);
  end;


  

Автор: Yanis 25.6.2006, 22:15
Цитата(ShadowDancerNew @  25.6.2006,  02:00 Найти цитируемый пост)
Как пользуясь этим кодом прочитать из test_IN.exe первые 10000 байт и записать в tert_OUT.exe ? 

Изменить размер массива на 10000 и стереть repeat...until. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)