; by ManHunter / PCL ; http://www.manhunter.ru ;----------------------------------------------------- ; ”ãªæ¨ï ¯®«ãç¥¨ï ¤«¨ë áâப¨ (Fast) ;----------------------------------------------------- ; lpStr - 㪠§ ⥫ì áâபã ASCIIZ ; ¢ë室¥: EAX - ¤«¨ áâப¨ ¡¥§ ãç¥â § ¢¥àè î饣® ; ã«¥¢®£® ¡ ©â ;----------------------------------------------------- ;proc _lstrlen lpStr:DWORD ; mov eax, [lpStr] ; sub eax, 4 ;@@: ; add eax, 4 ; cmp byte [eax], 0 ; je .szlen_lb1 ; cmp byte [eax+1], 0 ; je .szlen_lb2 ; cmp byte [eax+2], 0 ; je .szlen_lb3 ; cmp byte [eax+3], 0 ; jne @b ; sub eax, [lpStr] ; add eax, 3 ; ret ;.szlen_lb3: ; sub eax, [lpStr] ; add eax, 2 ; ret ;.szlen_lb2: ; sub eax, [lpStr] ; add eax, 1 ; ret ;.szlen_lb1: ; sub eax, [lpStr] ; ret ;endp ;----------------------------------------------------- ; ”ãªæ¨ï ¯®«ãç¥¨ï ¤«¨ë áâப¨ ;----------------------------------------------------- ; lpStr - 㪠§ ⥫ì áâபã ASCIIZ ; ¢ë室¥: EAX - ¤«¨ áâப¨ ¡¥§ ãç¥â § ¢¥àè î饣® ; ã«¥¢®£® ¡ ©â ;----------------------------------------------------- proc _lstrlen lpStr:DWORD mov eax, [lpStr] @@: inc eax cmp byte [eax], 0 jne @b sub eax, [lpStr] ret endp ;----------------------------------------------------- ; ”ãªæ¨ï ¡ëáâண® ᫨ï¨ï ¤¢ãå áâப ; ¨á¯®«ì§ãîâáï äãªæ¨¨ _lstrlen, _lstrcpy ;----------------------------------------------------- ; lpDst - 㪠§ â¥«ì ¨á室ãî áâபã ASCIIZ ; lpSrc - 㪠§ â¥«ì ¤®¡ ¢«ï¥¬ãî áâபã ASCIIZ ;----------------------------------------------------- proc _lstrcat lpDst:DWORD, lpSrc:DWORD pusha stdcall _lstrlen,[lpDst] add eax,[lpDst] stdcall _lstrcpy,eax,[lpSrc] popa ret endp ;----------------------------------------------------- ; ”ãªæ¨ï ¡ëáâண® ª®¯¨à®¢ ¨ï áâப¨ ; ¨á¯®«ì§ãîâáï äãªæ¨¨ _lstrlen, _memcopy ;----------------------------------------------------- ; lpDst - 㪠§ â¥«ì ¯à¨¥¬¨ª ; lpSrc - 㪠§ ⥫ì áâபã ASCIIZ ;----------------------------------------------------- proc _lstrcpy lpDst:DWORD, lpSrc:DWORD pusha stdcall _lstrlen,[lpSrc] inc eax stdcall _memcopy,[lpDst],[lpSrc],eax popa ret endp ;----------------------------------------------------- ; ”ãªæ¨ï ¡ëáâண® ª®¯¨à®¢ ¨ï ãç á⪠¯ ¬ï⨠;----------------------------------------------------- ; lpDst - 㪠§ â¥«ì ¯à¨¥¬¨ª ; lpSrc - 㪠§ â¥«ì ¨áâ®ç¨ª ; dSize - à §¬¥à ª®¯¨à㥬®£® ¡«®ª ;----------------------------------------------------- proc _memcopy lpDst:DWORD, lpSrc:DWORD, dSize:DWORD pusha ; “áâ ®¢¨âì 㪠§ ⥫¨ ¨áâ®ç¨ª ¨ ¯à¨¥¬¨ª cld mov edi,[lpDst] mov esi,[lpSrc] mov ecx,[dSize] push ecx ; §¤¥«¨âì 4 ¨ ¯®«ãç¨âì ¤«¨ã ¢ DWORD shr ecx,2 ; ‘ª®¯¨à®¢ âì ®á®¢ãî ç áâì áâப¨ DWORD' ¬¨ rep movsd pop ecx ; ®«ãç¨âì ®áâ ⮪ ®â ¤¥«¥¨ï 4 and ecx,3 ; ‘ª®¯¨à®¢ âì ®áâ ⮪ áâப¨ ¡ ©â ¬¨ rep movsb popa ret endp