рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдУрдмрд╕реБрд▓реЗрд╢рди рддрдХрдиреАрдХ

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

рдкрд░рд┐рдЪрдп


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

рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░:
- GCC 4.8.2 (mingw64)
- рдЖрдИрдбреАрдП рдбреЗрдореЛ
- рдХреНрд▓реЗрдВрдЧ 3.4
- рдПрд▓рдПрд▓рд╡реАрдПрдо 3.4

рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╕рдВрднрд╡ рд╣реИ?
1) рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реАрдПрдлрдЬреА
рдпрд╣ рд╡рд┐рдзрд┐ рдореВрд▓ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдЧреНрд░рд╛рдл рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИ, рдореВрд▓ рд╢реБрд░реБрдЖрддреА рдмреНрд▓реЙрдХ рдХреЛ рдХрдЪрд░реЗ рд╕реЗ рдкрддрд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдореВрд▓
#include <stdio.h> #include <stdlib.h> int rand_func() { return 5+rand();; } int main() { int a = rand_func(); goto test; exit(0); test: int b = a+a; } 

рдореВрд▓ рдЧрдгрдирд╛
рдЫрд╡рд┐
Obfuscation 1 рдкреНрд░рд╛рд░рдВрдн, рдореБрдЦреНрдп рдХрд╛рд░реНрдп
рдЫрд╡рд┐
рдУрдмрд╕реНрдпреВрд╢рди 2 рдкреНрд░рд╛рд░рдВрдн, рдореБрдЦреНрдп рдХрд╛рд░реНрдп
рдЫрд╡рд┐
рдСрдмрдлреНрдпреВрдЬрди 3 рд╕реНрдЯрд╛рд░реНрдЯ, рдореЗрди рдлрдВрдХреНрд╢рди
рдЫрд╡рд┐

2) рд╕реАрдПрдлрдЬреА рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрдзрд╛рд░ рдмреНрд▓реЙрдХ рдбрд╛рд▓реЗрдВред (1 рдмрд┐рдВрджреБ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВ)
рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреЗрд╕ рдмреНрд▓реЙрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢), рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЗрдЦрдХ рдХреА рдХрд▓реНрдкрдирд╛ рддрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
3) рдХреЛрдб рдХреЛ рд▓рд┐рдЯрд░ рдХрд░рдирд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдб рд╣реИ, рдпрд╣ рдХрдЪрд░рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдкрддрд▓рд╛ рд╣реИ рдЬреЛ рдЙрдирдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕реЗрд╕ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рдХреНрд╖реНрдп рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рд╣реИред
рдХрдИ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред
 #include <stdio.h> #include <stdlib.h> #include <time.h> void test() { int a = 32; int b = time(0); int c = a+a+b; int d = a-b+c*2; printf("%d",d); } int main() { test(); } 

рдЫрд╡рд┐

4) рдЫреБрдкрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ, рдбреЗрдЯрд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 15h рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдИ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдмрдиреЗрдЧрд╛ рдФрд░ рдЦреБрд▓реЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░рдВрддрд░ рдбреЗрдЯрд╛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
 #include <stdio.h> #include <stdlib.h> int main() { const char *habr = "habrahabr"; printf("%s",habr); } 

рд╣рдо рдирд┐рд░рдВрддрд░ рдбреЗрдЯрд╛ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рд╣рдмреНрдмрд░, рдФрд░ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░ рдбрд╛рд▓реЗрдВред рдЫрд╡рд┐ рдПрдХреНрд╕реЛрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдПрдИрдПрд╕, рдЖрд░рд╕реА 4, рдЖрджрд┐) рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдЯреИрдХ рдкрд░ рдЙрдкрдпреЛрдЧ (рдкреНрд░рд┐рдВрдЯрдл) рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЫрд╡рд┐
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреИрд╕реЗ рд╣реИ?
LLVM cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЕрдкрдирд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрдЦреЗрдВред

5) рдХреНрд▓реЛрдирд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдПрдХ рдФрд░ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдИ (рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде) рдореЗрдВ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЙрд▓ рдХреЛрдб рдХреА рдЬрдЧрд╣ рдкрд░ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
6) рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХреАрдХрд░рдгред
рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЙрдирдХреЗ рдХреЛрдб рдПрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
7) рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдпрд╛ рд╕реНрд╡рд┐рдЪ рдХреЗ рдХреЛрдб рд╕реЗ рд╕рдВрдЧрдардиред
рдПрдХ рдирдпрд╛ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рд╢рд╛рдЦрд╛рдПрдВ рдЗрд╕реЗ (рд╕рдВрднрд╡рддрдГ рдПрдХ рдЪрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд) рдЕрдиреНрдп рдмреЗрд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг
рдореВрд▓ рдХреЛрдбред
 #include <stdio.h> #include <stdlib.h> int rand_func() { return 5+rand();; } int main() { const char *habr = "habrahabr"; printf("%s",habr); int a = rand_func(); goto test; exit(0); test: int b = a+a; } 

рдкрд╣рд▓реА рдмрд╛рд░ред
рдЫрд╡рд┐
рджреВрд╕рд░реА рдмрд╛рд░ред
рдЫрд╡рд┐

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

рд╕реАрдЦрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╣рд╛рдБ рд╕реЗ рдХрд░реЗрдВ?


рдЙрдкрд▓рдмреНрдз рддреАрди-рдкрддрд╛ рдЖрджреЗрд╢реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦреЗрдВ
// === - llvm / Instruction.def - рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ - * - C ++ - * - === //
//
// рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░
//
// рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрд▓рд┐рдиреЛрдЗрд╕ рдУрдкрди рд╕реЛрд░реНрд╕ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХреА рдЧрдИ рд╣реИ
// рд▓рд╛рдЗрд╕реЗрдВрд╕ред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП LICENSE.TXT рджреЗрдЦреЗрдВред
//
// === --------------------------------------------- ------------------------- === //
//
// рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрд▓рдПрд▓рд╡реАрдПрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдпрд╣ рд╣реИ
// рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗрдВрджреНрд░реАрдп рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░
// рдЕрдВрддрддрдГ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
//
// === --------------------------------------------- ------------------------- === //

FIRST_TERM_INST (1)
HANDLE_TERM_INST (1, рд░рд┐рдЯ, рд░рд┐рдЯрд░реНрди)
HANDLE_TERM_INST (2, Br, BranchInst)
HANDLE_TERM_INST (3, рд╕реНрд╡рд┐рдЪ, рд╕реНрд╡рд┐рдЪ рдЗрди)
HANDLE_TERM_INST (4, IndirectBr, IndirectBrInst)
HANDLE_TERM_INST (5, рдЖрд╣реНрд╡рд╛рди, рдЖрд╣реНрд╡рд╛рди)
HANDLE_TERM_INST (6, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ)
HANDLE_TERM_INST (7, рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░, рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░)
LAST_TERM_INST (7)

// рдорд╛рдирдХ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ ...
FIRST_BINARY_INST (8)
HANDLE_BINARY_INST (8, рдЬреЛрдбрд╝реЗрдВ, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (9, FAdd, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (10, рдЙрдк, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (11, FSub, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (12, рдореВрд▓, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (13, FMul, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (14, UDiv, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (15, SDiv, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (16, FDiv, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (17, URem, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (18, SRem, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
HANDLE_BINARY_INST (19, FRem, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)

// рд▓реЙрдЬрд┐рдХрд▓ рдСрдкрд░реЗрдЯрд░реНрд╕ (рдкреВрд░реНрдгрд╛рдВрдХ рдСрдкрд░реЗрдВрдб)
HANDLE_BINARY_INST (20, рд╢рд▓, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░) // рд╢рд┐рдлреНрдЯ рд▓реЗрдлреНрдЯ (рддрд╛рд░реНрдХрд┐рдХ)
HANDLE_BINARY_INST (21, LShr, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░) // рд╢рд┐рдлреНрдЯ рд░рд╛рдЗрдЯ (рддрд╛рд░реНрдХрд┐рдХ)
HANDLE_BINARY_INST (22, рдПрд╢, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░) // рд╢рд┐рдлреНрдЯ рд░рд╛рдИрдЯ (рдЕрдВрдХрдЧрдгрд┐рдд)
HANDLE_BINARY_INST (23, рдФрд░, рджреНрд╡рд┐рдЖрдзрд╛рд░реА)
HANDLE_BINARY_INST (24, рдпрд╛, рджреНрд╡рд┐рдЖрдзрд╛рд░реА)
HANDLE_BINARY_INST (25, Xor, рдмрд╛рдЗрдирд░реАрдСрдкрд░реЗрдЯрд░)
LAST_BINARY_INST (25)

// рдореЗрдореЛрд░реА рдСрдкрд░реЗрдЯрд░ ...
FIRST_MEMORY_INST (26)
HANDLE_MEMORY_INST (26, Alloca, AllocaInst) // рд╕реНрдЯреИрдХ рдкреНрд░рдмрдВрдзрди
HANDLE_MEMORY_INST (27, рд▓реЛрдб, рднрд╛рд░)) // рдореЗрдореЛрд░реА рд╣реЗрд░рдлреЗрд░ рдЗрдВрд╕реНрдЯрд░реНрд╕
HANDLE_MEMORY_INST (28, рд╕реНрдЯреЛрд░, рд╕реНрдЯреЛрд░)
HANDLE_MEMORY_INST (29, GetElementPtr, GetElementPtrInst)
HANDLE_MEMORY_INST (30, рдмрд╛рдбрд╝, рдмрд╛рдбрд╝)
HANDLE_MEMORY_INST (31, AtomicCmpXchg, AtomicCmpXchgInst)
HANDLE_MEMORY_INST (32, AtomicRMW, AtomicRMWInst)
LAST_MEMORY_INST (32)

// рдХрд╛рд╕реНрдЯ рдСрдкрд░реЗрдЯрд░реНрд╕ ...
// рдиреЛрдЯ: рдпрд╣рд╛рдБ рдЖрджреЗрд╢ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ CastInst :: isEliminableCastPair рд╣реИ
// рдиреЛрдЯ: (рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВред рд╕реАрдкреАрд╕реА) рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред
FIRST_CAST_INST (33)
HANDLE_CAST_INST (33, Trunc, TruncInst) // рдкреВрд░реНрдгрд╛рдВрдХ рдкреВрд░реНрдгрд╛рдВрдХ
HANDLE_CAST_INST (34, ZExt, ZExtInst) // рд╢реВрдиреНрдп рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
HANDLE_CAST_INST (35, SExt, SExtInst) // рд╕рд╛рдЗрди рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
HANDLE_CAST_INST (36, FPToUI, FPToUIInst) // рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ -> UInt
HANDLE_CAST_INST (37, FPToSI, FPToSIInst) // рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ -> SInt
HANDLE_CAST_INST (38, UIToFP, UIToFPInst) // UInt -> рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ
HANDLE_CAST_INST (39, SIToFP, SIToFPInst) // SInt -> рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ
HANDLE_CAST_INST (40, FPTrunc, FPTruncInst) // рдЕрд╕реНрдерд╛рдпреА рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдмрд┐рдВрджреБ
HANDLE_CAST_INST (41, FPExt, FPExtInst) // рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдмрдврд╝рд╛рдПрдБ
HANDLE_CAST_INST (42, PtrToInt, PtrToIntInst) // рд╕реВрдЪрдХ -> рдкреВрд░реНрдгрд╛рдВрдХ
HANDLE_CAST_INST (43, IntToPtr, IntToPtrInst) // рдкреВрд░реНрдгрд╛рдВрдХ -> рд╕реВрдЪрдХ
HANDLE_CAST_INST (44, BitCast, BitCastInst) // рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯ
LAST_CAST_INST (44)

// рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ ...
FIRST_OTHER_INST (45)
HANDLE_OTHER_INST (45, ICmp, ICmpInst) // рдкреВрд░реНрдгрд╛рдВрдХ рддреБрд▓рдирд╛ рдЕрдиреБрджреЗрд╢
HANDLE_OTHER_INST (46, FCmp, FCmpInst) // рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддреБрд▓рдирд╛ рдЗрдВрд╕реНрдЯреНрд░ред
HANDLE_OTHER_INST (47, PHI, PHINode) // PHI рдиреЛрдб рдирд┐рд░реНрджреЗрд╢
HANDLE_OTHER_INST (48, рдХреЙрд▓, рдХреЙрд▓ рдЗрдирд╕реНрдЯреЙрд▓) // рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
HANDLE_OTHER_INST (49, рдЪреБрдиреЗрдВ, рдЪрдпрди рдХрд░реЗрдВ) // рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
HANDLE_OTHER_INST (50, UserOp1, рдирд┐рд░реНрджреЗрд╢) // рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
HANDLE_OTHER_INST (51, UserOp2, рдирд┐рд░реНрджреЗрд╢) // рдХреЗрд╡рд▓ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ
HANDLE_OTHER_INST (52, VAArg, VAArgInst) // vARg рдЕрдиреБрджреЗрд╢
HANDLE_OTHER_INST (53, ExtractElement, ExtractElementInst) // рд╡реЗрдХреНрдЯрд░ рд╕реЗ рдЕрд░реНрдХ
HANDLE_OTHER_INST (54, InsertElement, InsertElementInst) // рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВ
HANDLE_OTHER_INST (55, рд╢рдлрд▓рд▓реЗрдХреНрдЯрд░, рд╢рдлрд▓рд▓реЗрдХреНрдЯрд░ рдЗрдирд╕реНрдЯреЙрд▓) // рдлреЗрд░рдмрджрд▓ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ред
HANDLE_OTHER_INST (56, ExtractValue, ExtractValueInst) // рдХреБрд▓ рд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ
HANDLE_OTHER_INST (57, InsertValue, InsertValueInst) // рдХреБрд▓ рдореЗрдВ рдбрд╛рд▓реЗрдВ
HANDLE_OTHER_INST (58, рд▓реИрдВрдбрд┐рдВрдЧрдкреИрдб, рд▓реИрдВрдбрд┐рдВрдЧрдкреИрдб) // рд▓реИрдВрдбрд┐рдВрдЧ рдкреИрдб рдЕрдиреБрджреЗрд╢ред
LAST_OTHER_INST (58)

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
LLVM-cheatsheet
рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореИрдиреБрдЕрд▓
LLVM-CheatSheet 2
LLVMBackendCPU
рд╕реАрдПрдлрдПрдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реА ++ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди

рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред
1) рдСрдмрдлрд╕рдХрдЯрд░-рдПрд▓рдПрд▓рд╡реАрдПрдо
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдирд┐рд╖реНрдкрд╛рджрди рдЧреНрд░рд╛рдл рдХрд╛ рд╕рдВрдХрд▓рдиред
2) рдХреНрд░рд┐рдкреНрдЯреЛрдирд╛рдЗрдЯ
рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк / рдЕрдкрдШрдЯрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд┐рд░реНрджреЗрд╢ред

рдХреЗ рдЯреБрдХрдбрд╝реЗ


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

рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХреЛрдб
рдмрд╛рдИрдЯрдХреЛрдб рдлрд╛рдЗрд▓ рдХреИрд╕реЗ рдкрдврд╝реЗрдВ?
 std::string file = "1.bc"; std::string ErrorInfo; llvm::LLVMContext context; llvm::MemoryBuffer::getFile(file.c_str(), bytecode); llvm::Module *module = llvm::ParseBitcodeFile(bytecode.get(), context, &error); 

рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдХрд░реЗрдВ?
 for (auto i = module->getFunctionList().begin(); i != module->getFunctionList().end(); ++i) { printf("Function %s",i->getName().str()); } 

рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ?
 if (llvm::isa<llvm::BranchInst>(currentInstruction)) printf("BranchInst!"); 

рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдХреИрд╕реЗ рдмрджрд▓реЗрдВ?
 llvm::BasicBlock *block = () block->replaceAllUsesWith(  ); 

рджреВрд╕рд░реЗ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рджреЗрдВ?
 llvm::Instruction* test = basicBlock->getTerminator(); llvm::BranchInst* branchInst = llvm::dyn_cast<llvm::BranchInst>(test) 

рдЖрдзрд╛рд░ рдЗрдХрд╛рдИ рдореЗрдВ рдкрд╣рд▓рд╛ рдЧреИрд░- phi рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
 llvm::Instruction *inst = currentInstruction->getParent()->getFirstNonPHI() 

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреИрд╕реЗ рдХрд░реЗрдВ?
  for(llvm::inst_iterator i = inst_begin(function); i != inst_end(function); i++) { llvm::Instruction* inst = &*i; } 

рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ?
 bool IsUsedOutsideParentBlock(llvm::Instruction* inst) { for(llvm::inst::use_iterator i = inst->use_begin(); i != inst->use_end(); i++) { llvm::User* user = *i; if(llvm::cast<llvm::Instruction>(user)->getParent() != inst->getParent()) return true; } return false; } 

InvokeInst рдФрд░ рдЕрдиреНрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд / рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?
 invokeInst->getSuccessor(0); //    . invokeInst->setSuccessor(0,basicBlock); //. 



рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм


рдкреНрд░рд╢реНрди: рдорд▓рдмреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдПрдХ: рдпрд╣ рд╕рдм рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рддрд╛рдХрд┐ рдЖрдкрддреНрддрд┐ рдХреЛ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдкреНрд░рд╢реНрди: рд╕реНрд░реЛрдд рд╕реЗ рдмрд╛рдЗрдЯ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ?
рдПрдХ: clang -emit-llvm -o 1.bc -c 1.c
рдкреНрд░рд╢реНрди: рдмрд╛рдЗрдЯ рдХреЛрдб рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ?
рдПрдХ: clang -o 1 1.bc
рдкреНрд░рд╢реНрди: рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рджреГрд╢реНрдп рд╕реЗ рдПрдПрд╕рдПрдо рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ?
A: llc foo.ll
рдкреНрд░рд╢реНрди: рд╕реНрд░реЛрдд рд╕реЗ IR рдлрд╛рдЗрд▓ рдХреИрд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ?
A: clang -S -emit-llvm 1.c
рдкреНрд░рд╢реНрди: .s рдлрд╝рд╛рдЗрд▓ (рдЕрд╕реЗрдВрдмрд▓рд░) рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ?
A: gcc -o exe 1.s
рдкреНрд░рд╢реНрди: рдмрд╛рдпрдЯреЗрдХреЛрдб рд╕реЗ obj рдлрд╛рдЗрд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
A: llc -filetype=obj 1.bc
рдкреНрд░рд╢реНрди: cpp рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП LLVM рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
A: clang ++ -c -emit-llvm 1.cpp -o 1.ll рддрдм llc -march=cpp -o 1.ll.cpp 1.ll
рдкреНрд░рд╢реНрди: рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХреНрд▓реИрдВрдЧ, рд▓реЗрдХрд┐рди рд╡рд╣ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИ, рдХреИрд╕реЗ рдЗрд▓рд╛рдЬ рдХрд░реЗрдВ?
A: рдЖрдкрдХреЛ InitHeaderSearch.cpp рдвреВрдВрдврдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкрде рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, AddMinGWCPlusPlusIncludePaths, AddMinGW64CXXPaths рдХреА рдУрд░ рджреЗрдЦреЗрдВред
рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдХреНрд▓реИрдВрдЧ рдПрдХ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ?
A: рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд╣реАрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ C рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд╢реНрди: рдЕрдиреБрдХреВрд▓рди рдореЛрдб рдХреЗ рд╕рд╛рде рдХреНрд▓реЗрдВрдЧ рдЙрддреНрдкрдиреНрди рдирд┐рд░реНрджреЗрд╢реЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
A: рдЗрд╕ рд╕реАрдкреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреЗ рдорд╛рд░реНрдЧ рдХреЛ рдХреНрд▓реИрдВрдЧ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк -O0 рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles