Здравствуйте! На сайте(https://forum.sources.ru/index.php?showtopic=148078) нашёл код и подкорректировал под свои нужды. Код (ASM): format PE GUI 4.0 entry start include 'C:\FASM\INCLUDE\WIN32AX.INC' section ".data" data readable writeable path db "HELLOWORLD", 0 world db "WORLD",0 a1 db ? a2 db ? section ".code" code readable executable proc search,_baseadr,_stradr,_basel,_strl pushad cld mov edi,[_baseadr] .NXTSE: mov esi,[_stradr] mov ecx,[_basel] mov al,byte[esi]; dec edi repnz scasb jne .SEARTH_ERROR mov esi,[_stradr] mov ecx,[_strl] repz cmpsb jne .NXTSE mov eax,edi sub eax,[_strl] mov [resylt],eax jmp .EXT .SEARTH_ERROR: mov [resylt],0 invoke MessageBox, 0, "Error", "Error", MB_OK .EXT: popad mov eax,[resylt] ret resylt dd 0 endp start: invoke lstrlen, path mov eax, a1 invoke lstrlen, world mov eax, a2 stdcall search, path, goo, a1, a2 invoke ExitProcess,0 Процесс выполнения стопорится на repnz scasb. Почему так происходит?
Ты 3 и 4 аргументом указатели передаешь на a1 и a2, и используешь как счетчики для scasb и cmpsb. Вот cmpsb у тебя и уезжает в неведомые дали. После lstrlen'ов наверное сохранять туда надо eax (и в дворд, а не байт), а не помещать опять же в eax указатель. И передавать значения, а не указатели. --- Сообщение объединено, 28 ноя 2018 --- В фасме метка без ничего - указатель. В квадратных скобках [] - значение. Тип перед квадратными скобками BYTE/WORD/DWORD - если тип неопределен или не тот, какой надо. db - байт (byte), dw - слово (word), dd - двойное слово (dword). С комплектом win*x.inc макросов у invoke'ов stdcall'ов и прочего есть префикс addr чтоб адрес передавать (не абсолютный, на аргумент или локальную переменную или любое что-нибудь, адресуемое через регистр или регистр+смещение, через lea edx,[...])
Сохранять ворд на 1 байт кода дороже, а 1 байт это несерьезно lstrlenA дворд возвращает, всё говорит в пользу дворда.
Demon13, > Почему eax надо сохранять именно в dword? Хороший вопрос. Попытайтесь сохранить в word и спросите почему не получается. f13nd, Зачем вы решаете примитивные задачи за ньюби, это не помощь им.
Я вообще вопросов на форумах почти никогда не задаю и не понимаю зачем это делают. Зато прекрасно знаю, что мои философские наставления без опыта, на который они опираются, ни в хер ни кому не впились. Интересуется человек - объяснить нетрудно. Зачем ему это нужно - его дело.