All pastes #262070 Raw Edit

Mx

public text v1 · immutable
#262070 ·published 2006-11-30 03:28 UTC
rendered paste body
OPTION 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