· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Парсим файл в поисках скан-строки ;-)

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Дек 3, 2003 19:09:14

Ну что ж. И в лодку сесть, и рыбку не съесть :) Думай тады сам.


Дата: Дек 3, 2003 20:56:11

Есть такая мысля, читаем блоками по 1000h байты из файла в буфер, теперь
имеем указатель на считанный блок байтов, далее так или почти так:
    mov edi, OFFSET ScanString
    mov esi, OFFSET Buffer
    mov ecx, ScanStringLength
@loop:
    test ecx, ecx
    jz @find
    mov al, BYTE PTR [edi]
    test al, al
    jz @00h_find
    cmp BYTE PTR [esi], al
    je @parse
    inc edi
    inc esi
    mov ecx, ScanStringLength
    jmp @loop
@parse:
    inc edi
    inc esi
    dec ecx
    jmp @loop
@00h_find:
    inc edi
    inc esi
    dec ecx
    jmp @loop
@find:



Ну ещё нужно учесть когда будет конец буфера 1000h и вычислить адрес,
остальное вроде должно работать, я ещё не проверял, сегодня я никакой %)


Дата: Дек 3, 2003 21:07:39

Volodya
То, что я предлагал и есть как раз самый быстрый способ, если конечно код хороший будет.


Дата: Дек 3, 2003 21:09:51

Asterix
так я ж тебе готовую функцию запостил :)


Дата: Дек 3, 2003 21:20:59

dragon

Скорее всего да. В случае точного поиска подстроки в строке я бы с тобой поспорил, а что до неточного поиска - идея выглядит очень забавной.


Дата: Дек 3, 2003 21:21:28

Asterix
test ecx,ecx
jz @find
можно заменить на
jecxz @find
И вообще лучше уж так:
    mov edi, OFFSET ScanString
    mov esi, OFFSET Buffer
    mov ecx, ScanStringLength + 1
@loop:
    dec ecx
    jz @find
    mov al, BYTE PTR [edi]
    inc edi
    test al, al
    jz @00h_find
    cmp BYTE PTR [esi], al
    je @parse
    inc esi
    mov ecx, ScanStringLength + 1
    jmp @loop
@parse:
    inc esi
    jmp @loop
@00h_find:
    inc esi
    jmp @loop
@find:
Можно ещё подоптимизировать ;-)


Дата: Дек 3, 2003 21:31:41 · Поправил: Asterix

hello_world

Извини ;-) , но я терпеть не могу всякие lodsb, jecxz, cmpsb и т.д.
поэтому в твой код даже не вникал, может он и работает :-) , но уж
больно не наглядный :-)
И ещё, я пишу на masm32 поэтому со стеком не работаю как в твоей
процедуре, по крайней мере не здесь, в масме всё гораздо проще.


Дата: Дек 3, 2003 21:33:29

Quantum

Ну вот ещё мне один jecxz предлагает :-), ладно, когда код будет
полностью рабочим тогда займусь оптимизацией ;-)


Дата: Дек 3, 2003 21:57:25

Asterix
Извини ;-) , но я терпеть не могу всякие lodsb, jecxz, cmpsb и т.д.
поэтому в твой код даже не вникал, может он и работает :-)

Да, Воин Дзена, я разочарован :) А где же красота кода, свойственная ассемблеру, где часы медитации, проведенные за его оптимизированием? :) Что будет дальше? Переход на позорные дельфи или васик ? :) Пора спасать свою душу :)))

И ещё, я пишу на masm32 :-)
а это тут причем?


Дата: Дек 3, 2003 22:00:19

hello_world

При том, что этот отступник (Asterix), использует что-то вроде .IF eax != NULL, спаси господи его душу. Мы отвергаем его дзенское происхождение.


Дата: Дек 3, 2003 22:08:23

hello_world

Строковые инструкции вообще-то тормозные, быстрая только rep movsd, да и то быстрее данные через регистры mmx перемещать

Volodya

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


Дата: Дек 3, 2003 22:12:13

dragon
Строковые инструкции вообще-то тормозные
Я не по скорости оптимизировал а по размеру.


Дата: Дек 3, 2003 22:22:30

Меня не покидает чувство что в моём коде есть серьёзная
ошибка и она там таки есть!, скоро будет исправленный вариант.


Дата: Дек 3, 2003 22:24:24 · Поправил: Asterix

volodya

Из-за того что я у ся в дампере не использовал местами .if/.endif и
пропустил там серьёзную ошибку :-)))


Дата: Дек 3, 2003 22:33:46

dragon

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

Еще раз - да, для неточного поиска идея правильная. Хотя на algolist некоторые вещи на эту тему лежали...
Что до точного, то давным-давно разработана методика таблицы смещений, что и реализовано, например, в поиске Бойера-Мура.

Asterix

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

<< . 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.053