rendered paste body00403720 /. 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).