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

Вниз

Загрузка 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.07 c
15-1266711780
KilkennyCat
2010-02-21 03:23
2010.08.27
586b наглядно


15-1264355410
GDI+
2010-01-24 20:50
2010.08.27
Нифига себе прогнозы!..


4-1221129469
kalexi
2008-09-11 14:37
2010.08.27
Как загрузить BMP в массив?


15-1268832302
Константин
2010-03-17 16:25
2010.08.27
Построение оптимальной среды управления версиями


15-1264530887
Rouse_
2010-01-26 21:34
2010.08.27
Вопрос по поводу Дельфи 2009 (и выше)





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