Сейчас на форуме: Wenzel, r0lka, yashechka (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Как в бинарном файле найти последовательность байт
Посл.ответ Сообщение

Ранг: 11.9 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 25 ноября 2005 20:39
· Личное сообщение · #1

Может у кого есть алгоритм на дельфе. Нужно найти смещение в файле по которому расположена некая последовательность байт. Только нужно быстрый способ, требуется искать около 20 таких последовательностей в одном файле. А то тот которым делаю я секунд 20 все делает. Я делаю так

function Searche_offset_str(s, filename: string) : string;
var
f: file;
l: Longint;
oldstring, newstring: string;
begin
Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + 1;
oldstring := s;
AssignFile(f, FileName);
Reset(f, 1);
for l := 0 to FileSize(f) - Length(oldstring) - 1 do
begin
Seek(f, l);
BlockRead(f, oldstring[1], Length(oldstring));
if oldstring = s then
begin
result := '$'+ IntToHex(FilePos(F)-Length(oldstring), 8);
break;
end;
end;
CloseFile(f);
end;

вот так запустишь эту функцию раз 15 на двестикилобайтном файле так подвисает все секунд на 20..




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 25 ноября 2005 20:43 · Поправил: Ara
· Личное сообщение · #2


BlockRead(f1,Mass1,fSize1-1);
BlockRead(f2,Mass2,fSize2-1);
asm
LEA ESI,Mass1
ADD ESI,Count
LEA EDI,Mass2
ADD EDI,Count
MOV ECX,fSize1
REPE CMPSB
MOV Count,ECX
end;

Это сравнение двух файлов, под себя подстроишь сам....



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 25 ноября 2005 20:52
· Личное сообщение · #3

MOV ESI,StartAddress
CLD
MOV ECX, 2h -> Количетво байт для сравнения
MOV EDI, WhatFind
REPE CMPSB -> Сравниваем То что в ESI-с тем что в EDI
дальше условие что делаем если совпали




Ранг: 11.9 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 25 ноября 2005 21:47
· Личное сообщение · #4

Спасибо большое, буду разбираться...


 eXeL@B —› Крэки, обсуждения —› Как в бинарном файле найти последовательность байт
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати