Здрасте, не могу понять как правильно найти искомую комбинацию в тексте, код вываливаеться на lodsb, обьясните чего не так делаю TASM подобный синтаксис вставок не очень догоняю, сам пишу обычно только на fasm... Помогите пожалуйста... Код (Text): function ParseFile: integer; const find_str_mp3: string = 'operate'; var file_size: Integer; hfile : integer; mem : pointer; url : pointer; begin hfile:= _lopen(PChar(ApplicationPath+'data\cash.htm'), OF_READ); file_size:= GetFileSize(hfile, 0); mem:= VirtualAlloc(nil, file_size, MEM_COMMIT, PAGE_READWRITE); url:= VirtualAlloc(nil, 256, MEM_COMMIT, PAGE_READWRITE); _lread(hfile, mem, file_size); asm pusha cld mov esi, mem mov edi, offset find_str_mp3 xor ecx, ecx jmp @1 @0: sub esi, 5 mov edi, offset find_str_mp3 @1: cmp byte ptr esi, 0 je @5 lodsb cmp al, byte ptr [edi] jne @1 add esi, 5 add edi, 5 cmp al, byte ptr [edi] jne @0 @2: lodsb cmp al, "'" jne @2 mov edi, offset url @3: lodsb stosb cmp al, "'" jne @3 @4: dec edi xor eax, eax stosb @5: xor eax, eax dec eax @6: popa end; MessageBox(GetActiveWindow, PChar(url), '', 0); VirtualFree(url, 256, MEM_RELEASE); VirtualFree(mem, file_size, MEM_RELEASE); CloseHandle(hfile); result:= 0; end;
Да и кстати загружает не адрес первого символа строки, а адрес переменной find_str_mp3 (4-х байтного указателя на строку). Поэтому нужно просто без всякого offset Код (Text): mov edi, find_str_mp3
То же самое - offset не нужен. Вот видимо из-за этого и валится, т.к. у локальной переменной offset это просто отрицательное смещение относительно ebp
Ни уйа... Код (Text): function ParseFile: integer; var file_size: Integer; hfile : THandle; mem : pointer; url : pointer; begin hfile:= _lopen(PChar(ApplicationPath+'data\cash.htm'), OF_READ); file_size:= GetFileSize(hfile, 0); mem:= VirtualAlloc(nil, file_size, MEM_COMMIT, PAGE_READWRITE); url:= VirtualAlloc(nil, 256, MEM_COMMIT, PAGE_READWRITE); _lread(hfile, mem, file_size); CloseHandle(hfile); asm pusha int 3 cld mov esi, mem mov edi, find_str_mp3 jmp @1 @0: sub esi, 5 mov edi, find_str_mp3 @1: lodsb test al, al je @5 cmp al, byte ptr [edi] jne @1 add esi, 5 add edi, 5 cmp al, byte ptr [edi] jne @0 @2: lodsb cmp al, "'" jne @2 mov edi, url @3: lodsb stosb cmp al, "'" jne @3 @4: dec edi xor eax, eax stosb @5: xor eax, eax dec eax @6: popa end; MessageBox(GetActiveWindow, PChar(url), '', 0); VirtualFree(url, 256, MEM_RELEASE); VirtualFree(mem, file_size, MEM_RELEASE); // result:= 0; end;