Поиск строки

Тема в разделе "WASM.WIN32", создана пользователем Freecod, 5 июл 2006.

  1. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Ничего приличного в голову не приходит...
    Нужно найти строку произвольной длинны (пробелов нет) в памяти, размер данных известен.
    Т.Е.

    .data
    datas dd 0 ;;; указатель на данные
    func_name db "SetWindowText", 0 ;;; искомая строка
    dwFsize dd 0 ;;; размер данных

    Когда найдём - выйти из цикла. Не нашли - тоже выйти.
    У меня одна ерунда получается...
     
  2. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    самый простой вариант: rep cmpsb

    может это поможет

    Код (Text):
    1. strpos proc   ptrMain:DWORD, ptrSearched:DWORD
    2.        push   esi
    3.        push   edi
    4.        mov    esi,ptrMain
    5.        invoke strlen,ptrSearched
    6.        mov    edx,eax
    7.  
    8. @@:    mov    eax,esi
    9.        mov    ecx,edx
    10.        mov    edi,ptrSearched
    11.        repz   cmpsb
    12.        jz     @GotIt
    13.        mov    esi,eax
    14.        lodsb
    15.        test   al,al
    16.        jnz    @B
    17.  
    18.        xor    eax,eax
    19. @GotIt:
    20.        pop    edi
    21.        pop    esi
    22.        ret
    23. strpos endp
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Avoidik
    Все-таки лучше не вешать все на cmpsb. Обычно ищут первый символ искомой подстроки (repne scаsb) и если нашли, то проверяют остаток (repne cmpsb). Получается ненамного сложнее, но значительно быстрее (в среднем ;)