Главная страница
    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.038 c
9-1132859186
Мортимер
2005-11-24 22:06
2006.08.13
и снова этот гадский :) DoCollision


15-1153381637
s_pavell
2006-07-20 11:47
2006.08.13
Документирование принтера


4-1145378482
Dust
2006-04-18 20:41
2006.08.13
Получить адрес функции из указателя на метод


15-1152949725
QuickFinder
2006-07-15 11:48
2006.08.13
Программа для редактирования видео


3-1149598869
RDA
2006-06-06 17:01
2006.08.13
Многоколончатый отчет (Fast Report 3)





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