Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
Артем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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1153851370
Frojok
2006-07-25 22:16
2006.08.13
локальный диск с Windows


15-1152966609
Ketmar
2006-07-15 16:30
2006.08.13
напомните мне, чем чревато no 80-conductor cable


15-1153375915
QuickFinder
2006-07-20 10:11
2006.08.13
Топология


2-1153761813
Yegorchic
2006-07-24 21:23
2006.08.13
#10#13 в конце строки


6-1143726445
Trankvilizator
2006-03-30 17:47
2006.08.13
HTTP-код->Memo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский