Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск подстроки в строке

7
19 июля 2007 года
@pixo $oft
3.4K / / 20.09.2006
Как реализовать поиск подстроки в строке?Контекст такой:баннер программ(учите аглицкий-не думайте,что "баннер"-это реклама!).DLL подгружается к каждому процессу,открывает BanLst.txt,с помощью GetModuleFileName получает имя текущего процесса(знаете способ лучше?Предлагаем вам ultimate adventure!Выложи свой способ сюда,и количество ваших сообщений на форуме резко увеличится на 1).Так вот,требуется найти это имя в списке(файл отображается в память) и,если оно найдено,то прихлопнуть приложение(кстати,как это сделать?DLLMain должна вернуть 0?),а если нет,то спокойно продолжить.Тут с Insane88 решили провернуть такую вещь(а то тут,в "Ультрасервисе",у них,понимаете ли,не работают,а Асю гоняют).Он начал писать на VB,а я...ну вы же меня знаете(ну,и параллельно на VB тоже).Так как это реализовать(только простой поиск без кучи кода)?Может,апишки есть какие:)?
313
19 июля 2007 года
insane88
440 / / 13.12.2006
Жесть. Апикс. Не делай флеш-моб из маленькой шутки...

"Убивать чужие процессы нехорошо!" ©
7
25 июля 2007 года
@pixo $oft
3.4K / / 20.09.2006
Ну что,чего молчим,кого ждём?Мастистые ассембляторы не знают,как реализовать поиск?Самый простой?75 просмотров и ни одного ответа(разумного от умного человека)!!!
Вопрос конкретен:КАК реализовать ПРОСТЕЙШИЙ ПОИСК подстроки известной длины в имеющейся строке известной длины(без всяких извращений и сложностей)?Подстрока может быть любой длины(не 1/2/4 байта) и начинаться с любого адреса(а не кратного 1/2/4)
И ещё кое-что:Insane88,"убивать чюжые процессы"-твоя идея
1.9K
25 июля 2007 года
disasm
232 / / 06.02.2006
Если строки небольшие - тупым перебором, если очень большие (~1Mb) то лучше использовать спец. алгоритмы вроде поиска с помощью отсекающей пары. По поводу отсекающей пары ниего сказать не могу, нам это рассказывали на сборах по информатике, но я забыл все напрочь :) Код для полного перебора тяжело написть? Что-то вроде цикл в цикле с запихиванием регистра ecx в стек перед внутренним циклом. Если нужно - напишу, но это ИМХО просто уже
499
26 июля 2007 года
madjahed
149 / / 14.01.2004
Когда-то писал такое как ассемблерная вставка в функции С++:
(Не самая быстрая, но работающая; в коде специалньо вставил пару ошибок, чтоб сам разобрался, а не идею тырил ;-))

Код:
DWORD FindDataInMem(LPBYTE Source,DWORD SourceSize,LPBYTE FindData,DWORD FindDataSize,DWORD StartPointer=0)
 {
     DWORD j=0;
     __asm
     {
         //Главный цикл
         mov ecx,StartPointer
main_cycle:
         //Проверка условия главного цикла
         cmp SourceSize,eцx
         jl func_end
         //Если Source==FindData[0]
         mov al,byte ptr[Source+ecx]
         cmp al,byte ptr[FindData]
   //Если al==byte ptr[FindData]
         je end_main_cycle
         mov ebx,FindDataSize
cycle2_begin:
         //if(Source[i+j]!=FindData[j])
         mov eax,ecx
         add eax,ebx
         mov al,byte ptr[Source+eax]
         cmp al,byte ptr[FindData+ebx]
         jne end_main_cycle
         loop cycle2_begin
         push ecx;

         //Инкремент главного цикла и повтор
end_main_cycle:
         inc ecx
         jmp main_cycle
func_end:
         ret;

     }
 }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог