Форум: "Основная";
Текущий архив: 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