Главная страница
    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.46 MB
Время: 0.043 c
15-1151308474
Анонимщики
2006-06-26 11:54
2006.08.13
Летний чемпионат сайта по шахматам


15-1152872978
Эй
2006-07-14 14:29
2006.08.13
насчет работы


8-1130403631
Norsk
2005-10-27 13:00
2006.08.13
Быстрое дискретное двумерное преобразование фурье


15-1153404776
Гарри Поттер
2006-07-20 18:12
2006.08.13
Чего все ополчились против Израиля?


9-1132946060
Кефир87
2005-11-25 22:14
2006.08.13
Когда бокс больше чем фрустум





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский