Форум: "Начинающим";
Текущий архив: 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.077 c