All pastes #797209 Raw Edit

Someone

public text v1 · immutable
#797209 ·published 2007-11-25 20:58 UTC
rendered paste body
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).