rendered paste bodyOPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
;...........................................................................................
Align 16
db 8Dh, 0A4h, 24h, 0,0,0,0, 8Bh,0FFh,90h
xstrlen proc C lpst:DWORD
mov eax, [esp+4]
mov edx, 80808080h
test eax, 3
jne NotAlign
mov ecx, [eax]
@@1s:
add eax, 4
add ecx, 0FEFEFEFFh
test edx, ecx
mov ecx, [eax]
je @@1s
mov ecx, [eax-4]
sub eax, 4
test ecx, 0FFh
je C3eV_minus4
test ecx, 0FF00h
je C3eV_minus3
test ecx, 0FF0000h
je C3eV_minus2
test ecx, 0FF000000h
je C3eV_minus1
@@:
lea edx, [ecx+0FEFEFEFFh]
not ecx
and ecx, 80808080h
add eax, 4
and edx, ecx
mov ecx, [eax]
je @b
add eax,-4
shr edx, 8
jc @f
add eax, 1
shr edx, 8
jc @f
add eax, 1
shr edx, 8
jc @f
add eax, 1
@@:
sub eax, [esp+4]
ret 4
align 16
NotAlign:
test byte ptr [eax],0FFh
lea eax, [eax+1]
je @f
test eax, 3
jne NotAlign
mov ecx, [eax]
je @@1s
align 16
@@:
add eax,-1
shr edx, 8
jc @f
add eax, 1
shr edx, 8
jc @f
add eax, 1
@@:
sub eax, [esp+4]
ret 4
align 16
C3eV_minus1:
sub eax, [esp+4]
add eax, 3
ret 4
align 16
C3eV_minus2:
sub eax, [esp+4]
add eax, 2
ret 4
align 16
C3eV_minus3:
sub eax, [esp+4]
add eax, 1
ret 4
align 16
C3eV_minus4:
sub eax, [esp+4]
ret 4
xstrlen endp
;...........................................................................................
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef