Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Чтение из приложения в процессе выполнения   Найти похожие ветки 

 
Артем22   (2006-07-01 11:28) [0]

Чтение из приложения в процессе выполнения

Мне надо прочитать из конца собственного exe-файла некие данные в процессе выполения.

Делаю вот так:

 img := GetImageSize(Application.ExeName); // размер image
 fs := GetFileSize(Application.ExeName); // размер всего exe-файла
 data := fs-img; // размер дополнительных данных
 File := TFileStream.Create(Application.ExeName, fmOpenRead or fmShareDenyWrite);
 File.Seek(img, soFromBeginning);
 File.Read(perem, data);

Но загружает он почему-то с самого начала файла. Если вывести данные куда-нибудь, то выведется текст MZP.

Если дописать-что либо в конец, при запуске вылетит ошибка, но данные все равно будут прочитаны.

Надеюсь, с ДНК у меня все в порядке? :)


 
Дмитрий Белькевич ©   (2006-07-01 13:27) [1]

Создавай и подключай ресурсы и их читай.


 
Артем22   (2006-07-01 15:19) [2]

Нет, читать нужно именно из самого exe-шника, из конца файла.

Ресурсы использовать нельзя, т.к. вытаскиваются легко. :)


 
Пусик ©   (2006-07-01 19:28) [3]

1. GetImageSize - это что?
2. File.Seek(Data, soFromEnd);


 
unknown ©   (2006-07-01 19:35) [4]


> Артем22   (01.07.06 15:19) [2]

Некие данные можно и зашифровать, перед тем как поместить их в ресурс
приложения.


 
Артем22   (2006-07-01 19:49) [5]

>> GetImageSize - это что?

Размер exe-шника без оверлеев


 
Шпиён   (2006-07-01 20:22) [6]


> Артем22   (01.07.06 19:49) [5]

Тогда неплохо бы добавить, что сии функции ( GetImageSize и GetFileSize) взяты , например, вот отсюда:

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=42523

чтобы можно было понять, что вообще должно происходить в твоем коде, а не телепатировать.


 
Шпиён   (2006-07-01 20:31) [7]

Кстати, если функция GetFileSize взята именно "оттуда", то она  вернет 0, т.к. не сможет открыть файл.


 
Пусик ©   (2006-07-01 20:50) [8]

function GetImageSize(Instance:THandle):Cardinal;
var  Index:Integer;
 Header:PImageNtHeaders;
begin
 Result:=0;
 Inc(Instance,PImageDosHeader(Instance)._lfanew);
 Header:=PImageNtHeaders(Instance);
 Inc(Instance,SizeOf(TImageNtHeaders));
 for Index:=1 to Header.FileHeader.NumberOfSections do begin
   with PImageSectionHeader(Instance)^ do
     if PointerToRawData+SizeOfRawData>Result then
       Result:=PointerToRawData+SizeOfRawData;
   Inc(Instance,SizeOf(TImageSectionHeader));
 end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
 FS: TFileStream;
 Buf: PChar;
 BufLen: Int64;
 ImgSize: Int64;
begin
 FS := TFileStream.Create(ParamStr(0),fmOpenRead or fmShareDenyWrite);
 ImgSize := GetImageSize(HInstance);
 BufLen := FS.Size - ImgSize;
 FS.Position := ImgSize;
 GetMem(Buf,BufLen);
 FS.Read(Buf[0],BufLen);
 Memo1.Lines.Add(Buf);
 FS.Free;
end;


 
Игорь Шевченко ©   (2006-07-01 22:19) [9]


> Размер exe-шника без оверлеев


А откуда в PE оверлеи ?


 
Артем22   (2006-07-02 08:08) [10]

Спасибо огромное Пусику - все работает! :D



Страницы: 1 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
2-1153681417
Rav
2006-07-23 23:03
2006.08.13
TFrame: класс TDATETIMEFIELD не найден


15-1152657756
SPeller
2006-07-12 02:42
2006.08.13
Снова борьба с альтернативными ICQ клиентами?


15-1153110266
Карелин Артем
2006-07-17 08:24
2006.08.13
Посоветуйте небольшой смартфон.


3-1149505937
WhiteBarin
2006-06-05 15:12
2006.08.13
Где взять FastReport


15-1152966255
Юрий Зотов
2006-07-15 16:24
2006.08.13
2 stone: Олег, позвони мне, пожалуйста.