00403720 /. 55 PUSH EBP ; MSVCR80.printf 00403721 |. 89E5 MOV EBP,ESP 00403723 |. 53 PUSH EBX 00403724 |. 56 PUSH ESI 00403725 |. 57 PUSH EDI 00403726 |. 8B45 10 MOV EAX,[ARG.3] 00403729 |. 8B75 0C MOV ESI,[ARG.2] 0040372C |. 8B4D 08 MOV ECX,[ARG.1] 0040372F |> 0FB611 /MOVZX EDX,BYTE PTR DS:[ECX] 00403732 |. 0FB63E |MOVZX EDI,BYTE PTR DS:[ESI] 00403735 |. 85FF |TEST EDI,EDI 00403737 |. 0F85 08000000 |JNZ Compare.00403745 0040373D |. 8B75 0C |MOV ESI,[ARG.2] 00403740 |.^ E9 EAFFFFFF |JMP Compare.0040372F 00403745 |> 31FA |XOR EDX,EDI 00403747 |. 8811 |MOV BYTE PTR DS:[ECX],DL 00403749 |. 83C1 01 |ADD ECX,1 0040374C |. 83C6 01 |ADD ESI,1 0040374F |. 83C0 FF |ADD EAX,-1 00403752 |. 85C0 |TEST EAX,EAX 00403754 |.^ 0F85 D5FFFFFF \JNZ Compare.0040372F 0040375A |. 5F POP EDI 0040375B |. 5E POP ESI 0040375C |. 5B POP EBX 0040375D |. 5D POP EBP 0040375E \. C3 RETN 004034A0 /. 55 PUSH EBP 004034A1 |. 89E5 MOV EBP,ESP 004034A3 |. 53 PUSH EBX 004034A4 |. 56 PUSH ESI 004034A5 |. 57 PUSH EDI 004034A6 |. 8B45 10 MOV EAX,[ARG.3] 004034A9 |. 8B4D 08 MOV ECX,[ARG.1] 004034AC |> 8B75 0C MOV ESI,[ARG.2] 004034AF |> 0FB611 /MOVZX EDX,BYTE PTR DS:[ECX] 004034B2 |. 0FB63E |MOVZX EDI,BYTE PTR DS:[ESI] 004034B5 |. 85FF |TEST EDI,EDI 004034B7 |.^ 0F84 EFFFFFFF |JE Compare.004034AC 004034BD |. 31FA |XOR EDX,EDI 004034BF |. 8811 |MOV BYTE PTR DS:[ECX],DL 004034C1 |. 83C1 01 |ADD ECX,1 004034C4 |. 83C6 01 |ADD ESI,1 004034C7 |. 83C0 FF |ADD EAX,-1 004034CA |. 85C0 |TEST EAX,EAX 004034CC |.^ 0F85 DDFFFFFF \JNZ Compare.004034AF 004034D2 |. 5F POP EDI ; kernel32.GetTickCount 004034D3 |. 5E POP ESI 004034D4 |. 5B POP EBX 004034D5 |. 5D POP EBP 004034D6 \. C3 RETN 54 bytes as opposed to 62 :> 00401730 /$ 33C0 XOR EAX,EAX 00401732 |. 33C9 XOR ECX,ECX 00401734 |. 85F6 TEST ESI,ESI 00401736 |. 7E 29 JLE SHORT Compare.00401761 00401738 |. EB 06 JMP SHORT Compare.00401740 0040173A | 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX] 00401740 |> 80B9 7C304000>/CMP BYTE PTR DS:[ECX+40307C],0 00401747 |. 75 02 |JNZ SHORT Compare.0040174B 00401749 |. 33C9 |XOR ECX,ECX 0040174B |> 8A91 7C304000 |MOV DL,BYTE PTR DS:[ECX+40307C] 00401751 |. 3090 3C304000 |XOR BYTE PTR DS:[EAX+40303C],DL 00401757 |. 83C0 01 |ADD EAX,1 0040175A |. 83C1 01 |ADD ECX,1 0040175D |. 3BC6 |CMP EAX,ESI 0040175F |.^ 7C DF \JL SHORT Compare.00401740 00401761 \> C3 RETN ^ Optimized non-inline version weighs in at 49 bytes. Not bad at all considering the C compiler takes advantage of not having to stick to conventions of callee saving registers (Due to lack of native OS calls).