Главная страница
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.055 c
1-1151743737
mrAld
2006-07-01 12:48
2006.08.13
сборка через консоль


6-1139988013
maep
2006-02-15 10:20
2006.08.13
SOAP, вызов метода веб сервиса


15-1153043236
Германн
2006-07-16 13:47
2006.08.13
Контроллеры СОМ портов


1-1151669893
IceBeerg
2006-06-30 16:18
2006.08.13
Как развернуть приложение из трея?


15-1153304180
cosinus
2006-07-19 14:16
2006.08.13
Создание "спутникообразного" меню... Вопросы.