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