Pwnable.kr 17 рдХреЗ рд╕рд╛рде рдПрдХ рдиреМрдХрд░реА рд╣рд▓ рдХрд░рдирд╛ - рдпрд╛рджрдЧрд╛рд░ред рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг

рдЫрд╡рд┐

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рдЗрдЯ pwnable.kr рд╕реЗ 17 рд╡реЗрдВ рдХрд╛рд░реНрдп рдХреЛ рднреА рд╣рд▓ рдХрд░реЗрдВрдЧреЗ ред

рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реВрдЪрдирд╛ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдирд╛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:

  • PWN;
  • рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА (рдХреНрд░рд┐рдкреНрдЯреЛ);
  • рдиреЗрдЯрд╡рд░реНрдХ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ (рдиреЗрдЯрд╡рд░реНрдХ);
  • рд░рд┐рд╡рд░реНрд╕ (рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ);
  • рд╕реНрдЯреЗрдЧреНрдиреЛрдЧреНрд░рд╛рдлрд╝реА (рд╕реНрдЯреЗрдЧреНрдиреЛ);
  • WEB рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдЙрдирдХрд╛ рджреЛрд╣рдиред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдлреЛрд░реЗрдВрд╕рд┐рдХ, рдореИрд▓рд╡реЗрдпрд░ рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡рд╛рдпрд░рд▓реЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╣рдорд▓реЗ, рдкреЗрдВрдЯреЗрд╕реНрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░рдирд╛рдореЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред

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

рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд▓реЗрдЦрдХ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕реА рдХреЛ рд╣реБрдП рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг


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

рд╕рдВрд░реЗрдЦрд┐рдд рдФрд░ рдЧреИрд░-рд╕рдВрд░реЗрдЦрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдореЙрдбрд▓ рдХреА рдмреЗрд╣рддрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ред

struct Data{ int var1; void* mas[4]; }; 

рдЪреВрдБрдХрд┐ x32 рдФрд░ x64 рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рдЪрд░ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрд░рдорд╢рдГ 4 рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рд╢реВрдиреНрдп * рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдХреНрд░рдорд╢рдГ 4 рдФрд░ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, x32 рдФрд░ x64 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓рд╛ X64 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдФрд░ 4 рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

 struct Data{ int var1; int addition; void* mas[4]; }; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, x64 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рдореЗрдореНрдЪреА рдиреМрдХрд░реА рд╕рдорд╛рдзрд╛рди


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

рд╡реЗ рд╕реНрд░реЛрдд рдХреЛрдб рднреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
 // compiled with : gcc -o memcpy memcpy.c -m32 -lm #include <stdio.h> #include <string.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <sys/mman.h> #include <math.h> unsigned long long rdtsc(){ asm("rdtsc"); } char* slow_memcpy(char* dest, const char* src, size_t len){ int i; for (i=0; i<len; i++) { dest[i] = src[i]; } return dest; } char* fast_memcpy(char* dest, const char* src, size_t len){ size_t i; // 64-byte block fast copy if(len >= 64){ i = len / 64; len &= (64-1); while(i-- > 0){ __asm__ __volatile__ ( "movdqa (%0), %%xmm0\n" "movdqa 16(%0), %%xmm1\n" "movdqa 32(%0), %%xmm2\n" "movdqa 48(%0), %%xmm3\n" "movntps %%xmm0, (%1)\n" "movntps %%xmm1, 16(%1)\n" "movntps %%xmm2, 32(%1)\n" "movntps %%xmm3, 48(%1)\n" ::"r"(src),"r"(dest):"memory"); dest += 64; src += 64; } } // byte-to-byte slow copy if(len) slow_memcpy(dest, src, len); return dest; } int main(void){ setvbuf(stdout, 0, _IONBF, 0); setvbuf(stdin, 0, _IOLBF, 0); printf("Hey, I have a boring assignment for CS class.. :(\n"); printf("The assignment is simple.\n"); printf("-----------------------------------------------------\n"); printf("- What is the best implementation of memcpy? -\n"); printf("- 1. implement your own slow/fast version of memcpy -\n"); printf("- 2. compare them with various size of data -\n"); printf("- 3. conclude your experiment and submit report -\n"); printf("-----------------------------------------------------\n"); printf("This time, just help me out with my experiment and get flag\n"); printf("No fancy hacking, I promise :D\n"); unsigned long long t1, t2; int e; char* src; char* dest; unsigned int low, high; unsigned int size; // allocate memory char* cache1 = mmap(0, 0x4000, 7, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); char* cache2 = mmap(0, 0x4000, 7, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); src = mmap(0, 0x2000, 7, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); size_t sizes[10]; int i=0; // setup experiment parameters for(e=4; e<14; e++){ // 2^13 = 8K low = pow(2,e-1); high = pow(2,e); printf("specify the memcpy amount between %d ~ %d : ", low, high); scanf("%d", &size); if( size < low || size > high ){ printf("don't mess with the experiment.\n"); exit(0); } sizes[i++] = size; } sleep(1); printf("ok, lets run the experiment with your configuration\n"); sleep(1); // run experiment for(i=0; i<10; i++){ size = sizes[i]; printf("experiment %d : memcpy with buffer size %d\n", i+1, size); dest = malloc( size ); memcpy(cache1, cache2, 0x4000); // to eliminate cache effect t1 = rdtsc(); slow_memcpy(dest, src, size); // byte-to-byte memcpy t2 = rdtsc(); printf("ellapsed CPU cycles for slow_memcpy : %llu\n", t2-t1); memcpy(cache1, cache2, 0x4000); // to eliminate cache effect t1 = rdtsc(); fast_memcpy(dest, src, size); // block-to-block memcpy t2 = rdtsc(); printf("ellapsed CPU cycles for fast_memcpy : %llu\n", t2-t1); printf("\n"); } printf("thanks for helping my experiment!\n"); printf("flag : ----- erased in this source code -----\n"); return 0; } 


рдЫрд╡рд┐

рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдмреИрдирд░ рджреЗрдЦрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред

рдЫрд╡рд┐

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реАрдбрдореА рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо 9022 рдкреЛрд░реНрдЯ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдкреЛрд░реНрдЯ 9022 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИ - рдореЗрдореНрдкреА рдХреЗ рдзреАрдореЗ рдФрд░ рддреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдлрд┐рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдзреАрдореЗ рдФрд░ рддреЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ред рдПрдХ рдмрд╛рдд рд╣реИ: рдкреНрд░рдпреЛрдЧ 10, рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ - 5ред

рдЫрд╡рд┐

рдЪрд▓реЛ рдХреНрдпреЛрдВ рд╕рд╛рдл рд╣реИред рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдЬрдЧрд╣ рдЦреЛрдЬреЗрдВред

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдХреЛрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдХрд▓ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ SSE2 рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдБ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ : SSE2, SSE рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде x86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЖрда 128-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ (xmm0 рд╕реЗ xmm7) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ 2 рд▓рдЧрд╛рддрд╛рд░ рдбрдмрд▓-рд╕рдЯреАрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЛрдб рд╕рдВрд░реЗрдЦрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЫрд╡рд┐

рдЫрд╡рд┐

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрд░реЗрдЦрдг 128 рдмрд┐рдЯреНрд╕, рдпрд╛рдиреА 16 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреНрд▓реЙрдХ 16 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдвреЗрд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ (рдЪрд▓реЛ X) рддреЛ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдИ рдмрд╛рдЗрдЯреНрд╕ (Y) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ ( X + Y)% 16 0 рдерд╛ред

рдЪреВрдВрдХрд┐ рд╕рднреА рдСрдкрд░реЗрд╢рди рдвреЗрд░ рдмреНрд▓реЙрдХреЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рджреЛ рдХреЗ рдЧреБрдгрдХ рд╣реИрдВ, рдПрдХреНрд╕ рдкрд░ 2, 4, 8, рдЗрддреНрдпрд╛рджрд┐ред 16 рддрдХред

рдЫрд╡рд┐

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХреНрд╕ = 4 рдХреЗ рд╕рд╛рде, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рддрд╛ рд╣реИред

рдЫрд╡рд┐

рд╣рдореЗрдВ рд╢реЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИ, рдЭрдВрдбрд╛ рдкрдврд╝реЗрдВ, 10 рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЫрд╡рд┐

рдЖрдк рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рд╣рдорд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi462895/


All Articles