
рдПрдХ рд╣рдм рдкрд░ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдФрд░ рдЖрд╡реЗрджрди рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд▓реЗрдЦ рд╣реИрдВред рдореИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдмрдлрд┐рдХреЗрд╢рди рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдкрд░рд┐рдЪрдп
рд▓реЗрдЦ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдШрдЯрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХреЛ рдХреБрдЫ рдЬреНрдЮрд╛рди рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рддреИрдпрд╛рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдП рдмрд┐рдирд╛, рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред
рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рд░реНрджреЗрд╢ рддреАрди-рдкрддрд╛ рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд
рд╣реЛрддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рджреЛ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИред
рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░:
-
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 2LLVMBackendCPUрд╕реАрдПрдлрдПрдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реА ++ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрдирдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред
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);
рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм
рдкреНрд░рд╢реНрди: рдорд▓рдмреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдПрдХ: рдпрд╣ рд╕рдм рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рддрд╛рдХрд┐ рдЖрдкрддреНрддрд┐ рдХреЛ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдкреНрд░рд╢реНрди: рд╕реНрд░реЛрдд рд╕реЗ рдмрд╛рдЗрдЯ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ?
рдПрдХ:
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 рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред