FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Проба поиска строк на ассемблере

Участников: 2

Перейти вниз

Проба поиска строк на ассемблере Empty Проба поиска строк на ассемблере

Сообщение  trew Вт Апр 19, 2011 7:47 pm

Решил попробовать реализовать подобие функции Instr на ассемблерных вставках, но результат меня разочаровал. Скорость поиска получилась медленнее, но наверно оно и понятно... Ладно выкладываю код, может найдется кто-то заинтересованный и оптимизирует его.

Код:
Function FindString(ByVal dest As String, ByVal search As String, ByVal pos_ As Integer) As Integer Export
   Dim As Integer return__
   Dim As Integer ptr return_=@return__,add_=@pos_
   
   Asm
      push ebp
      mov edi,[add_]
      push edi   
      mov edi,[return_]
      push edi
      mov edx,[dest]
      Add edx,[pos_]
      dec edx
      mov ebx,[search]
      Xor edi,edi
      Xor esi,esi
      Xor ebp,ebp
      mov ecx,-1
      main:
      mov al,[ebx+esi]
      mov ah,[edx+edi]
      cmp al,0
      jz finish
      cmp ah,0 
      jz finish
      cmp al,ah
      jz Yes
      cmp ebp,0
      jz ret__
      mov edi,ebp      
      ret__:
      Xor ebp,ebp
      Xor esi,esi
      inc edi
      jmp No_
      Yes:
      cmp ebp,0
      jnz EBPNONULL
      mov ebp,edi
      inc ebp
      EBPNONULL:
      inc edi
      inc esi
      No_:
      loop main
      finish:
      cmp ebp,0
      jz Err
      Not ecx   
      jmp Valid
      Err:
      pop eax
      pop ebx
      mov [eax],ebp   
      jmp END_
      Valid:      
      pop eax
      pop ecx
      Add ebp,[ecx]
      dec ebp
      mov [eax],ebp
      END_:
      pop ebp
   End Asm
   Return return__
End Function
Print FindString("FreeBasic","Bas",1):Sleep

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

Проба поиска строк на ассемблере Empty Re: Проба поиска строк на ассемблере

Сообщение  Саня Ср Апр 20, 2011 4:48 pm

судя по всему это брутфорс. Соответственно, хоть код и маленький, но быстротой не блещет, ибо делает len(dest)*len(search) сравнений... нужно менять алгоритм... эт раз... потом если уж писать на асме, то хоть оптимайзить надо..эт два. имхо, но и для брутфорса можно сделать меньше переходов.
Потом посмотрю, перепишу, попытаюсь...
Саня
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 30
Откуда : Екатеринбург

http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения