0,0 → 1,129 |
; 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 |
push edi ecx |
|
cld |
mov edi,[lpStr] |
xor ecx,ecx |
dec ecx |
xor eax,eax |
repne scasb |
not ecx |
dec ecx |
mov eax,ecx |
|
pop ecx edi |
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 |