рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдб рдФрд░ рд╕рдордп рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИ

рдРрд╕реА рдШрдбрд╝рд┐рдпрд╛рдБ рд╕рдордп рдХреЗ рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдЕрдиреБрдХреВрд▓ рд╣реИрдВ OpenSSL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рд╣реЛрдирд╣рд╛рд░ рдирд╛рдо CRYPTO_memcmp () ред рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдореЗрдореНрдХрдВрдк () рдореЗрдВ рдПрдХ рдШрд╛рддрдХ рджреЛрд╖ рд╣реИ - рдЗрд╕рдХрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рди рдХреЗрд╡рд▓ рддреБрд▓рдирд╛рддреНрдордХ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рддрдерд╛рдХрдерд┐рдд рд╕рдордп рдХреЗ рд╣рдорд▓реЗ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред



рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╣реИрдВ - рдирд┐рд░рдВрддрд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдореЗрдордХреИрдВрдк рдХрдИ рд╣рдЬрд╛рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред



рд╣рдо CRYPTO_memcmp () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛рдПрдВрдЧреЗ , рдмрд▓реНрдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрдореЙрдореНрдк () рдХреЗ "рд╕рд╛рдорд╛рдиреНрдп" рдФрд░ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ ред



"рд╕рд╛рдорд╛рдиреНрдп" рдЗрд╕ рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ:

int memcmp( const void* f, const void* s, size_t length ) { const unsigned char* first = f; const unsigned char* second = s; while( length != 0 ) { if( *first > *second ) return 2; if( *first < *second ) return -5; length--; first++; second++; } return 0; }
      
      



рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ 1 рдФрд░ -1) рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЬреИрд╕реЗ рд╣реА рдкрд╣рд▓рд╛ рдЕрдВрддрд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрдХреНрд░ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрдХреНрд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред



рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ CRYPTO_memcmp () рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :

 int CRYPTO_memcmp( const void* f, const void* s, size_t length ) { size_t i; const unsigned char* first = f; const unsigned char* second = s; unsigned char magic = 0; for( i = 0; i < length; i++ ) { magic |= (first[i] ^ second[i]); } return magic; }
      
      



рдкрд╣рд▓рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ "рд╢реВрдиреНрдп" рдФрд░ "рд╢реВрдиреНрдп рдирд╣реАрдВ" рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрдореНрдХрдореНрдк () рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рджреВрд╕рд░рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



ALASред



рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ CRYPTO_memcmp ( " ) рдХреЛ рддреЛрдбрд╝рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдорд╢реАрди рдХреЛрдб рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдореЗрдореНрдХреИрдВрдк () рдХреЗ рд▓рд┐рдП рд╣реИ (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдирдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдмрд╛рдд рдХреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреА рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХреНрдпрд╛ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, gcc.godbolt.org рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдПрдХ рднреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рдХ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк - рдЖрдк рдкреЙрдкрдХреЙрд░реНрди рдкрд░ рд╕реНрдЯреЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдм рдлрд┐рд░ рд╕реЗ CRYPTO_memcmp () рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВ ред рд╡рд╣реАрдВ, рд╕реНрдЯреИрдВрдбрд░реНрдб C99 рдХреЛ рджреЗрдЦреЗрдВред рдЗрд╕рдореЗрдВ C ++ 03 рдорд╛рдирдХ рдХреЗ 1.9 / 6 рдореЗрдВ "рджреЗрдЦреЗ рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░" рдХреА рдРрд╕реА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди 5.1.2.3/3 рдореЗрдВ рдпрд╣ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЙрд╕ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ "рдЖрд╡рд╢реНрдпрдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡" рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 5.1.2.3/6 рдореЗрдВ, рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрд╕реНрдерд┐рд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкрд┐рдЫрд▓реЗ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рди рдкреВрд░реЗ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдмрд╛рдж рд╡рд╛рд▓реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ"ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реА ++ 03 рдХреА 1.9 / 6 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ - рдЙрди рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рдпреЛрдЧреНрдпрддрд╛ рдирд╣реАрдВ рд╣реИред



рд╣рдо рдЗрд╕ рдЕрджреНрднреБрдд рдЪрдХреНрд░ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ:

 /* i variable value not used after the loop */ for( i = 0; i < length; i++ ) { magic |= (first[i] ^ second[i]); }
      
      



рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЛрдиреЛрдВ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдВрдбрд░реНрдб рдХреЛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдЬрд╛рджреВ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдорд╛рдирдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдРрд╕реЗ рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдореИрдВ рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рди рдЪрдХреНрд░ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрдХреВрд▓рди рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ):

 /* i variable value not used after the loop */ for( i = 0; i < length; i++ ) { magic |= (first[i] ^ second[i]); if( magic == UCHAR_MAX ) break; }
      
      



рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдСрдкрд░реЗрд╢рди | = рдпрд╛ рддреЛ рдЬрд╛рджреВ рдЪрд░ рдХреЗ рдмрд┐рдЯреНрд╕ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ 1 рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдиреНрд╣реЗрдВ 0 рдкрд░ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рд╕рднреА рдЕрдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдЬрд┐рдХ рдЪрд░ рдХреЗ рдорд╛рди рдореЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред



рдХреНрдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ? рдХреЛрдб рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рддреБрд▓рдирд╛рддреНрдордХ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдорд╛рди рд╣реИрдВ рдпрд╛ рдкрд╣рд▓рд╛ рдЕрдВрддрд░ рд╢реБрд░реБрдЖрдд рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдФрд░ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ - рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ C ++ 9 рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдорд╢реАрди рдХреЛрдб рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред



рдпрд╣ рдмреНрд░реЗрдХ рдХреЗ рдмрд┐рдирд╛ рд▓реВрдк рдХрд╛ рдорд╢реАрди рдХреЛрдб рд╣реИ:

 00AF10D3 mov bl,byte ptr [eax+edi] 00AF10D6 xor bl,byte ptr [eax] 00AF10D8 inc eax 00AF10D9 or dl,bl 00AF10DB sub ebp,1 00AF10DE jne wmain+0D3h (0AF10D3h)
      
      



рддреЛ - рдмреНрд░реЗрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реВрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

 00AF1116 mov edx,dword ptr [esp+1Ch] 00AF111A mov dl,byte ptr [eax+edx] 00AF111D xor dl,byte ptr [eax] 00AF111F or bl,dl 00AF1121 cmp bl,0FFh 00AF1124 je wmain+12Ch (0AF112Ch) 00AF1126 inc ecx 00AF1127 inc eax 00AF1128 cmp ecx,esi 00AF112A jl wmain+116h (0AF1116h)
      
      



рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 6 рдХреЗ рдмрдЬрд╛рдп 10 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рддреБрд▓рдирд╛ ( рд╕реАрдПрдордкреА рдирд┐рд░реНрджреЗрд╢) рдФрд░ рд╕рд╢рд░реНрдд рдХреВрдж ( рд╕реАрдПрдордкреА рдЕрдиреБрджреЗрд╢ рдХреЗ рдмрд╛рдж рдЬреЗрдИ рд╕реЗрдореА ) рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред



рдпрд╣ рдкреНрд░рддрд┐рд╢рдд рдкреНрд░рддрд┐рд╢рдд рдзреАрдорд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╣реИ рдирд╛?



рд▓реЗрдХрд┐рди рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i5 660 рдкрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдмрд░рд╛рдмрд░ рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде) рджреВрд╕рд░рд╛ рдХреЛрдб рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 3 рдкреНрд░рддрд┐рд╢рдд рд╕реЗ рдЕрдзрд┐рдХ рдзреАрдорд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд░рд┐рдгрд╛рдо рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) - рд╢рд╛рдЦрд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рджреВрд╕рд░реЗ рдХреЛрдб рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрд╕рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд░реАрд╕реЗрдЯ, рд▓рдЧрднрдЧ рдХреЛрдИ рдордВрджреА рдирд╣реАрдВред рдпрджрд┐ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ UCHAR_MAX рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝реА рдмрд╛рдЗрдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдореВрд▓реНрдп рджреВрд╕рд░реЗ рдмрд╛рдЗрдЯ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯрд╡рд╛рдЗрд╕ рдирдХрд╛рд░ рд╣реИ, рддреЛ рдЖрдк рдкреНрд░рддрд┐рдЧрдорди рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЕрдВрддрд░ рд╢реБрд░реБрдЖрдд рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рд╕реНрддрд░ рдХреЗ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рдеред 3 рдкреНрд░рддрд┐рд╢рдд рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ "рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд╣реИ" рд╢реБрд░реБрдЖрдд рдХреЗ 97% рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╣реАрдВ рд╣реИ)ред



рдХрдВрдкрд╛рдЗрд▓рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рд╣реЗрдпреБрд░рд┐рд╕реНрдЯрд┐рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛ред



рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХреЛрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рддрдХрдиреАрдХ (рд╡рд┐рдЬреБрдЕрд▓ C ++ рдореЗрдВ рдкреАрдЬреАрдУ рдЬреИрд╕реА рдХреБрдЫ) рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЯреЗрд╕реНрдЯ рдкреИрдХреЗрдЬ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд╛рд╕ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рд╣реИ рдпрд╛ рдирд╣реАрдВред



рд╣рдореЗрдВ рдпрд╣ рднреА рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i5 рдХреЗ рд▓рд┐рдП рдХреЛрдб рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдпреЛрдЬрди = = , рддреБрд▓рдирд╛ рдФрд░ рд╕рдВрдХреНрд░рдордг, рд╢реВрдиреНрдп рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВред with | = ред рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛ред



рдКрдкрд░, рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рддреАрди рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред



рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рд░рдЧрд░реНрдореА рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрд▓рдЯреАрдУ, рдПрд▓рдЯреАрд╕реАрдЬреА рдпрд╛ рдЖрдкрдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХрдИ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рд╕рд╛рде рдлрдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рджреЛрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 if( CRYPTO_memcmp( first, second, size ) != 0 ) { /* blahblhablah */ }
      
      





рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЪрдХреНрд░ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

 for( i = 0; i < length; i++ ) { if( first[i] != second[i]) return 3; }
      
      



рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рддреАрди рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред



CRYPTO_memcmp () рдЬреИрд╕рд╛ рдХреЛрдб рдкреЛрд░реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдб рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХрд▓рдХ рдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╛рд▓рди рд╡рд┐рдзрд┐ рдЬрд╛рджреБрдИ рдЪрд░ рдХреЛ рдЬрд╛рджреБрдИ рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ рдЬреЛ рд▓реВрдк рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдкрд░ = = рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЬрд╛рджреБрдИ рдЪрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦрдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЪрд░ рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрдбреЗрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реЗ Intel Core i5 660 рдкрд░, рд▓реВрдк рдХреЛрдб рд▓рдЧрднрдЧ рдЖрдзрд╛ рд░рд╣ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдХреА рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореИрдЬрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдХреЛрдб рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░рдХреНрд╖рдг рдХреЗ рдЕрдзреАрди "рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЯреВ рд╡рд╛рд╖реНрдкрд╢реАрд▓ " рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 int CRYPTO_memcmp( const void* f, const void* s, size_t length ) { size_t i; const volatile unsigned char* first = f; const volatile unsigned char* second = s; unsigned char magic = 0; for( i = 0; i < length; i++ ) { magic |= (first[i] ^ second[i]); } return magic; }
      
      



рдЕрдЧрд░ рдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ рдЕрд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдк рд╡реНрдпрд░реНрде рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рд╡реНрдпрд░реНрдеред const рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЖрдкрдХреЗ рдХреЛрдб рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдХреА рддрд░рд╣ , рдпрд╣ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдореЗрдВ рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рди рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдЖрдорддреМрд░ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣рддреЗ рд╣реИрдВ рдРрд╕реЗ рд╕рдВрдХреЗрдд рдФрд░ рд░реАрдб рдХреЛрдб рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



рджрд┐рдорд┐рддреНрд░реА рдореЗрд╢реНрдЪреЗрд░реАрдХреЛрд╡,

рдбреЗрд╡рд▓рдкрд░ рдЙрддреНрдкрд╛рдж рд╡рд┐рднрд╛рдЧ



All Articles