Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Загрузка exe файла в Memo   Найти похожие ветки 

 
Dmitrijan ©   (2010-02-11 00:12) [0]

Уважаемые форумчане, подскажите новичку, мне нужно загрузить exe файл в Memo. Процедурой Memo1.Lines.LoadFromFile ("exefile"); не грузится, а точнее загружает только три символа и все. Обычным же блокнотом .exe открыть можно.


 
Германн ©   (2010-02-11 00:14) [1]

Какая цель загрузки exe-файла в Memo?


 
dmitrijan ©   (2010-02-11 00:18) [2]

Там написано название используемого инсталлятора. (Например Inno, NSIS и т.д). Собственно это мне и нужно.


 
Германн ©   (2010-02-11 00:21) [3]


> Там написано название используемого инсталлятора. (Например
> Inno, NSIS и т.д). Собственно это мне и нужно.

Сделай поиск по файлу слов, которые тебе нужны. Найдешь, прочитай и покажи хоть в лейбле, хоть в мемо. Зачем грузить в мемо кучу нечитаемого мусора.


 
KilkennyCat ©   (2010-02-11 00:27) [4]

Что-то мне подсказывает, что поиск здесь лишнее, наверняка это в определенном месте, по крайней мере, у каждого в отдельности.


 
dmitrijan ©   (2010-02-11 00:34) [5]

Германн, Не получается, в текстовых находит эти слова, в exe никак.
Вот мой код для txt:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
s1,s2,s3:String;
i:integer;
begin
Memo1.Lines.LoadFromFile("1.txt");
s1:="inno";
s2:="nsis";
s3:="installshield";
for i:=0 to Memo1.Lines.Count-1 do
if Pos(s1, Memo1.Lines.Text)<>0
then
begin
Label1.Font.Color:=clTeal;
Label1.Caption:=(s1);
RichEdit1.Lines.Clear;
RichEdit1.Lines.LoadFromFile("res\inno.doc");
end;
for i:=0 to Memo1.Lines.Count-1 do
if Pos(s2, Memo1.Lines.Text)<>0
then
begin
Label1.Font.Color:=clTeal;
Label1.Caption:=(s2);
RichEdit1.Lines.Clear;
RichEdit1.Lines.LoadFromFile("res\nsis.doc");
end;
for i:=0 to Memo1.Lines.Count-1 do
if Pos(s3, Memo1.Lines.Text)<>0
then
begin
Label1.Caption:=(s3);
end;
if Pos(s1, Memo1.Lines.Text) or Pos(s2, Memo1.Lines.Text) or Pos(s3, Memo1.Lines.Text)=0
then
begin
RichEdit1.Lines.Clear;
Label1.Font.Color:=clRed;
Label1.Caption:=("Инсталлятор не опознан!");
end;
end;


 
Германн ©   (2010-02-11 01:19) [6]


> dmitrijan ©   (11.02.10 00:34) [5]
>
> Германн, Не получается

Я же тебе советовал искать в файле А ты ищешь в той бредятине, которую загрузил в мемо из файла метод LoadFromFile. Почувствуй разницу!

Ищи что-то типа "Boyer-Moore-Horspool pattern searching
algorithm".


 
Германн ©   (2010-02-11 01:28) [7]


> KilkennyCat ©   (11.02.10 00:27) [4]
>
> Что-то мне подсказывает, что поиск здесь лишнее, наверняка
> это в определенном месте, по крайней мере, у каждого в отдельности.
>

Когда я советовал "поиск в файле" я имел в виду что-то типа Германн ©   (11.02.10 01:19) [6]
Но это поиск в буфере, в который читается файл блоками. А вот то, что ты имел в виду - это именно "поиск в файле"! :)


 
KilkennyCat ©   (2010-02-11 01:33) [8]

и даже бредятину надо писать нормально, мы не индусы. Достаточно одного прогона, с выходом по нахождению, и не надо так часто присваивать цвет, достаточно один раз, в конце.

И еще раз скажу - ненужен тут поиск, и даже вреден, не слушай Германна, он не выспался.


 
Германн ©   (2010-02-11 01:33) [9]


> dmitrijan ©   (11.02.10 00:34) [5]

Если не найдешь, могу кинуть исходник, но очень старый (от Д1). Алгоритм понять можно.


 
KilkennyCat ©   (2010-02-11 01:35) [10]


> А вот то, что ты имел в виду - это именно "поиск в файле"!
>  :)


Я имел ввиду, что инсталлятор оставляет свою метку в определенном месте и определенного размера. Сие позволяет прочитать ее сразу, поиск тут никаким боком, кроме того, вероятность, что в файле будут два и более слова равных заданным признакам достаточно высока.


 
dmitrijan ©   (2010-02-11 01:36) [11]

Как я понял Memo можно вообще выкинуть, а искать слова по  вышесказанному алгоритму. Спасибо за подсказку, буду пробовать.


 
dmitrijan ©   (2010-02-11 01:37) [12]

Германн, конечно, хотелось бы взглянуть на ваш исходник :)


 
Германн ©   (2010-02-11 01:39) [13]


> И еще раз скажу - ненужен тут поиск, и даже вреден, не слушай
> Германна, он не выспался.
>

Лучше не слушать котов ночью. :)
Костя. Если известен адрес нужного байта в файле, так тут и нужен поиск в файле. Точнее позиционирование.
А если адрес не известен, то нужно искать.


 
Германн ©   (2010-02-11 01:40) [14]


> dmitrijan ©   (11.02.10 01:37) [12]

Почта в анкете валидна?


 
KilkennyCat ©   (2010-02-11 01:41) [15]


> Если известен адрес нужного байта в файле, так тут и нужен
> поиск в файле. Точнее позиционирование.

бред.

> А если адрес не известен, то нужно искать.

что искать? набор байт, случайно образовавшие "inno" и "nsis" ?


 
dmitrijan ©   (2010-02-11 01:42) [16]

Валидна :)


 
Германн ©   (2010-02-11 01:46) [17]


> KilkennyCat ©   (11.02.10 01:41) [15]
>
>
> > Если известен адрес нужного байта в файле, так тут и нужен
> > поиск в файле. Точнее позиционирование.
>
> бред.
>

Ну это не ко мне. Не я написал процедуру Seek. :)


 
Германн ©   (2010-02-11 01:46) [18]


> dmitrijan ©   (11.02.10 01:42) [16]

Отправил.


 
dmitrijan ©   (2010-02-11 01:48) [19]

Германн, спасибо за исходник, буду разбиратся.


 
KilkennyCat ©   (2010-02-11 01:54) [20]


> Не я написал процедуру Seek. :)

ну тогда посмотри, как она написана, и покажи мне, как там происходит поиск. Я так думаю, что компьютеры медленно работают до сих пор только из-за этого: как только что-то потребуется процессору, он говорит: а дайте-ка мне это по такому-то адресу, и все, полная жопа, все остальные начинают искать адрес...


 
Smile   (2010-02-11 02:01) [21]

> KilkennyCat ©   (11.02.10 01:54) [20]

Очень редко "выглядываю" ночью, тем более приятно, наблюдать, что даже в такое время суток, есть те, кто может указать на "их" место, тем кто этого заслуживает
:)


 
Германн ©   (2010-02-11 02:03) [22]


> KilkennyCat ©   (11.02.10 01:54) [20]
>
>
> > Не я написал процедуру Seek. :)
>
> ну тогда посмотри, как она написана

Костя, проспись. Ты уже совсем вышел из сабжа! Ты читаешь ответы, но не понимаешь их.


 
Германн ©   (2010-02-11 02:10) [23]


> Smile   (11.02.10 02:01) [21]
>
> > KilkennyCat ©   (11.02.10 01:54) [20]
>
> Очень редко "выглядываю" ночью, тем более приятно, наблюдать,
>  что даже в такое время суток, есть те, кто

"Германн ©   (11.02.10 01:57) [11]

> KilkennyCat ©   (11.02.10 00:30) [5]
>
> а мне предлагают винды бесплатно.

Ты Костя сегодня ночью читаешь очень невнимательно. Там не предлагают "винды бесплатно". Там предостерегают от покупки пиратской версии. :)
<Цитата>

KilkennyCat ©   (11.02.10 02:00) [12]

> Германн ©   (11.02.10 01:57) [11]

Я ваще не читаю. Просто бросается крупный шрифт, автоматом воспринимаю.
"
:)


 
KilkennyCat ©   (2010-02-11 02:16) [24]


> Ты читаешь ответы, но не понимаешь их.


Да. Не понимаю.
Я не понимаю, какой  может быть поиск, да еще по какому-то алгоритму для строк(!), когда задача стоит как четкое определение типа файла по сигнатуре.


 
dmitrijan ©   (2010-02-11 02:21) [25]

KilkennyCat, Да я тоже думал про сравнение сигнатур, но этот метод для меня сложен.Я писал в первом посте, что удивился когда открыл файл блокнотом, и увидел, что там строкой написан тип инсталлятора. Примерно в начале файла.


 
KilkennyCat ©   (2010-02-11 02:24) [26]

Потом удивишься, что практически большинство екзешников определятся как nsis


 
KilkennyCat ©   (2010-02-11 02:24) [27]

Это в случае с поиском.


 
dmitrijan ©   (2010-02-11 02:29) [28]

Вот пример из блокнота файл Inno:
<assemblyIdentity
   name="JR.Inno.Setup"
   processorArchitecture="x86"
   version="1.0.0.0"
   type="win32"/>

слов NSIS там не нашел, впрочем как и в NSIS файле слов Inno.


 
KilkennyCat ©   (2010-02-11 02:30) [29]


> dmitrijan ©   (11.02.10 02:21) [25]
>
> Да я тоже думал про сравнение сигнатур, но
> этот метод для меня сложен.

Правильно думал. И Это в разы менее сложно, чем hBoyer-Moore-Horspool. Можешь убедиться, вот его реализация: http://www.angusj.com/delphi/searches.html

Для поиска по сигнатуре тебе нужно:
Определить, где они находятся. Это можно прочитав документацию к инсталлятору, или препарированием оного.
Открыть файл. assdignFile, reset
Переместиться в нужную позицию. seek
Прочитать нужное количество (равное размеру сигнатуры) байт. Readbuffer
Сравнить. if
Закрыть файл. closefile
Итого: менее 10 строк кода, 99,9% точности результата.


 
dmitrijan ©   (2010-02-11 02:40) [30]

Спасибо всем! Буду эксперементировать.


 
Германн ©   (2010-02-11 02:53) [31]


> KilkennyCat ©   (11.02.10 02:16) [24]
>
>
> > Ты читаешь ответы, но не понимаешь их.
>
>
> Да. Не понимаю.
> Я не понимаю, какой  может быть поиск, да еще по какому-
> то алгоритму для строк(!), когда задача стоит как четкое
> определение типа файла по сигнатуре.

Задача вообще-то на тот момент вообще не была озвучена. Был только дурацкий вопрос о загрузке exe-файла в Memo.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.177 c
15-1267574302
DillerXX
2010-03-03 02:58
2010.08.27
Может тут мне помогут с вопросом о модеме?


2-1268726485
Boortwint
2010-03-16 11:01
2010.08.27
Нахождение "особого" элемента в массиве.


6-1217494891
laao
2008-07-31 13:01
2010.08.27
Как получить детали отклоненного запроса - IdHTTPServer+OpenSSL ?


15-1275393586
bss
2010-06-01 15:59
2010.08.27
Отключить скрол у TComboBox


15-1265395623
GreyWolf
2010-02-05 21:47
2010.08.27
Ищу Fix for QC report 37403