{"id":213259,"date":"2014-02-23T15:04:03","date_gmt":"2014-02-23T11:04:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=213259"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=213259","title":{"rendered":"<span class=\"post_title\">\u0422\u0435\u0445\u043d\u0438\u043a\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 LLVM<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/2de\/4f5\/161\/2de4f51619cf10fb063263e52af20c8e.png\" alt=\"image\" align=\"left\"\/><br \/>  \u041d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f LLVM. \u041c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0440\u0435\u0445\u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u043e\u0440\u0438\u0438, \u0447\u0435\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439 \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0430\u043c\u043e\u043c\u0443, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 <a href=\"http:\/\/llvm.org\/docs\/LangRef.html\">LLVM IR<\/a> \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0435\u0445\u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0434\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0441\u043e\u0444\u0442:<br \/>   \u2014 <a href=\"http:\/\/sourceforge.net\/projects\/mingwbuilds\/?source=dlp\">GCC 4.8.2<\/a> (mingw64)<br \/>   \u2014 <a href=\"http:\/\/out7.hex-rays.com\/files\/idademo65_windows.exe\">IDA DEMO<\/a><br \/>   \u2014 <a href=\"http:\/\/llvm.org\/releases\/download.html#3.4\">Clang 3.4<\/a><br \/>   \u2014 <a href=\"http:\/\/llvm.org\/releases\/download.html#3.4\">LLVM 3.4<\/a><\/p>\n<p>  \u0427\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 LLVM?<br \/>  1) C\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Control_flow_graph\">CFG<\/a><br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0433\u0440\u0430\u0444 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044f \u0435\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d, \u0440\u0430\u0437\u0431\u0430\u0432\u043b\u0435\u043d \u043c\u0443\u0441\u043e\u0440\u043e\u043c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b  <\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int rand_func() { \treturn 5+rand();; } int main() { \tint a = rand_func(); \tgoto test; \texit(0); \ttest: \tint b = a+a; } <\/code><\/pre>\n<p>  \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1cd\/191\/8df\/1cd1918df35fc3a6415ea062a870bf75.png\" alt=\"image\"\/><br \/>  \u041e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f 1 \u0437\u0430\u043f\u0443\u0441\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f main<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/059\/514\/fbc\/059514fbc8ed18c7ed3886bcd7e0f013.png\" alt=\"image\"\/><br \/>  \u041e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f 2 \u0437\u0430\u043f\u0443\u0441\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f main<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/002\/f9d\/8f7\/002f9d8f7663fcabff249b136a7741ab.png\" alt=\"image\"\/><br \/>  \u041e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f 3 \u0437\u0430\u043f\u0443\u0441\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f main<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/9a4\/75d\/584\/9a475d584ddddfa551002f3488f76f9e.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  2) \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B1%D0%BB%D0%BE%D0%BA\">\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432<\/a> \u0432 CFG, \u0441 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c.(\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0441 \u043f.1)<br \/>  \u0411\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b \u0431\u043b\u043e\u043a, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440(\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430), \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c, \u043d\u0430 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0430.<br \/>  3) \u0417\u0430\u043c\u0443\u0441\u043e\u0440\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430.<br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043e\u043d \u0440\u0430\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u044c. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f\/\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435 \u0432\u043b\u0438\u044f\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0446\u0435\u043b\u043e\u043c. \u0426\u0435\u043b\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void test() {     int a =  32; \tint b = time(0); \tint c = a+a+b; \tint d = a-b+c*2; \tprintf(&quot;%d&quot;,d); } int main() { \ttest(); } <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f16\/491\/f43\/f16491f43ccb57dcf185038ca2313bd3.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  4) \u0421\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 15h, \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435.\u0422\u0430\u043a \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;  int main() { \tconst char *habr = &quot;habrahabr&quot;; \tprintf(&quot;%s&quot;,habr); } <\/code><\/pre>\n<p>  \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e habrahabr, \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0439 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0449\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 xor-\u043e\u043c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f (AES,RC4 \u0438 \u0442\u0434.) \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (printf) \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u0435\u043c.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/db8\/de8\/69f\/db8de869fbe9a4919ba595f737922595.png\" alt=\"image\"\/><br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e?<br \/>  LLVM \u0443\u043c\u0435\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 cpp \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.<br \/>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.  <\/div>\n<\/div>\n<p>  5) \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<br \/>  \u041e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e(\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438), \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u0434\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<br \/>  6) \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. <br \/>  \u0412\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0445 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0447\u0440\u0435\u0432\u0430\u0442\u043e.<br \/>  7) \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437 \u043a\u043e\u0434\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82\">\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430<\/a> \u0438\u043b\u0438 \u0441\u0432\u0438\u0442\u0447\u0430.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f main \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0442 \u043d\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439) \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0431\u043b\u043e\u043a\u0430\u043c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434.  <\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;  int rand_func() { \treturn 5+rand();; }  int main() { \tconst char *habr = &quot;habrahabr&quot;; \tprintf(&quot;%s&quot;,habr); \tint a = rand_func(); \tgoto test; \texit(0); \ttest: \tint b = a+a; } <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/c34\/c79\/1a0\/c34c791a0b41b4aa92eca8fcd1df6c5f.png\" alt=\"image\"\/><br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e6f\/4d5\/ea4\/e6f4d5ea4807b9cbf52088e409671d91.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  8) \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u0446\u0438\u043a\u043b\u043e\u0432.<br \/>  \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430, \u0446\u0438\u043a\u043b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<br \/>  9) \u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u0432\u0435\u0441\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0435\u0435, \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438.<\/p>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435?<\/h4>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0440\u0435\u0445\u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\/\/===&#8212; llvm\/Instruction.def \u2014 File that describes Instructions -*- C++ -*-===\/\/<br \/>  \/\/ <br \/>  \/\/ The LLVM Compiler Infrastructure<br \/>  \/\/<br \/>  \/\/ This file is distributed under the University of Illinois Open Source<br \/>  \/\/ License. See LICENSE.TXT for details.<br \/>  \/\/ <br \/>  \/\/===&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-===\/\/<br \/>  \/\/<br \/>  \/\/ This file contains descriptions of the various LLVM instructions. This is<br \/>  \/\/ used as a central place for enumerating the different instructions and <br \/>  \/\/ should eventually be the place to put comments about the instructions.<br \/>  \/\/<br \/>  \/\/===&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-===\/\/<\/p>\n<p>  FIRST_TERM_INST ( 1)<br \/>  HANDLE_TERM_INST ( 1, Ret, ReturnInst)<br \/>  HANDLE_TERM_INST ( 2, Br, BranchInst)<br \/>  HANDLE_TERM_INST ( 3, Switch, SwitchInst)<br \/>  HANDLE_TERM_INST ( 4, IndirectBr, IndirectBrInst)<br \/>  HANDLE_TERM_INST ( 5, Invoke, InvokeInst)<br \/>  HANDLE_TERM_INST ( 6, Resume, ResumeInst)<br \/>  HANDLE_TERM_INST ( 7, Unreachable, UnreachableInst)<br \/>   LAST_TERM_INST ( 7)<\/p>\n<p>  \/\/ Standard binary operators\u2026<br \/>   FIRST_BINARY_INST( 8)<br \/>  HANDLE_BINARY_INST( 8, Add, BinaryOperator)<br \/>  HANDLE_BINARY_INST( 9, FAdd, BinaryOperator)<br \/>  HANDLE_BINARY_INST(10, Sub, BinaryOperator)<br \/>  HANDLE_BINARY_INST(11, FSub, BinaryOperator)<br \/>  HANDLE_BINARY_INST(12, Mul, BinaryOperator)<br \/>  HANDLE_BINARY_INST(13, FMul, BinaryOperator)<br \/>  HANDLE_BINARY_INST(14, UDiv, BinaryOperator)<br \/>  HANDLE_BINARY_INST(15, SDiv, BinaryOperator)<br \/>  HANDLE_BINARY_INST(16, FDiv, BinaryOperator)<br \/>  HANDLE_BINARY_INST(17, URem, BinaryOperator)<br \/>  HANDLE_BINARY_INST(18, SRem, BinaryOperator)<br \/>  HANDLE_BINARY_INST(19, FRem, BinaryOperator)<\/p>\n<p>  \/\/ Logical operators (integer operands)<br \/>  HANDLE_BINARY_INST(20, Shl, BinaryOperator) \/\/ Shift left (logical)<br \/>  HANDLE_BINARY_INST(21, LShr, BinaryOperator) \/\/ Shift right (logical)<br \/>  HANDLE_BINARY_INST(22, AShr, BinaryOperator) \/\/ Shift right (arithmetic)<br \/>  HANDLE_BINARY_INST(23, And, BinaryOperator)<br \/>  HANDLE_BINARY_INST(24, Or, BinaryOperator)<br \/>  HANDLE_BINARY_INST(25, Xor, BinaryOperator)<br \/>   LAST_BINARY_INST(25)<\/p>\n<p>  \/\/ Memory operators\u2026<br \/>   FIRST_MEMORY_INST(26)<br \/>  HANDLE_MEMORY_INST(26, Alloca, AllocaInst) \/\/ Stack management<br \/>  HANDLE_MEMORY_INST(27, Load, LoadInst ) \/\/ Memory manipulation instrs<br \/>  HANDLE_MEMORY_INST(28, Store, StoreInst )<br \/>  HANDLE_MEMORY_INST(29, GetElementPtr, GetElementPtrInst)<br \/>  HANDLE_MEMORY_INST(30, Fence, FenceInst )<br \/>  HANDLE_MEMORY_INST(31, AtomicCmpXchg, AtomicCmpXchgInst )<br \/>  HANDLE_MEMORY_INST(32, AtomicRMW, AtomicRMWInst )<br \/>   LAST_MEMORY_INST(32)<\/p>\n<p>  \/\/ Cast operators\u2026<br \/>  \/\/ NOTE: The order matters here because CastInst::isEliminableCastPair <br \/>  \/\/ NOTE: (see Instructions.cpp) encodes a table based on this ordering.<br \/>   FIRST_CAST_INST(33)<br \/>  HANDLE_CAST_INST(33, Trunc, TruncInst ) \/\/ Truncate integers<br \/>  HANDLE_CAST_INST(34, ZExt, ZExtInst ) \/\/ Zero extend integers<br \/>  HANDLE_CAST_INST(35, SExt, SExtInst ) \/\/ Sign extend integers<br \/>  HANDLE_CAST_INST(36, FPToUI, FPToUIInst ) \/\/ floating point -&gt; UInt<br \/>  HANDLE_CAST_INST(37, FPToSI, FPToSIInst ) \/\/ floating point -&gt; SInt<br \/>  HANDLE_CAST_INST(38, UIToFP, UIToFPInst ) \/\/ UInt -&gt; floating point<br \/>  HANDLE_CAST_INST(39, SIToFP, SIToFPInst ) \/\/ SInt -&gt; floating point<br \/>  HANDLE_CAST_INST(40, FPTrunc, FPTruncInst ) \/\/ Truncate floating point<br \/>  HANDLE_CAST_INST(41, FPExt, FPExtInst ) \/\/ Extend floating point<br \/>  HANDLE_CAST_INST(42, PtrToInt, PtrToIntInst) \/\/ Pointer -&gt; Integer<br \/>  HANDLE_CAST_INST(43, IntToPtr, IntToPtrInst) \/\/ Integer -&gt; Pointer<br \/>  HANDLE_CAST_INST(44, BitCast, BitCastInst ) \/\/ Type cast<br \/>   LAST_CAST_INST(44)<\/p>\n<p>  \/\/ Other operators\u2026<br \/>   FIRST_OTHER_INST(45)<br \/>  HANDLE_OTHER_INST(45, ICmp, ICmpInst ) \/\/ Integer comparison instruction<br \/>  HANDLE_OTHER_INST(46, FCmp, FCmpInst ) \/\/ Floating point comparison instr.<br \/>  HANDLE_OTHER_INST(47, PHI, PHINode ) \/\/ PHI node instruction<br \/>  HANDLE_OTHER_INST(48, Call, CallInst ) \/\/ Call a function<br \/>  HANDLE_OTHER_INST(49, Select, SelectInst ) \/\/ select instruction<br \/>  HANDLE_OTHER_INST(50, UserOp1, Instruction) \/\/ May be used internally in a pass<br \/>  HANDLE_OTHER_INST(51, UserOp2, Instruction) \/\/ Internal to passes only<br \/>  HANDLE_OTHER_INST(52, VAArg, VAArgInst ) \/\/ vaarg instruction<br \/>  HANDLE_OTHER_INST(53, ExtractElement, ExtractElementInst)\/\/ extract from vector<br \/>  HANDLE_OTHER_INST(54, InsertElement, InsertElementInst) \/\/ insert into vector<br \/>  HANDLE_OTHER_INST(55, ShuffleVector, ShuffleVectorInst) \/\/ shuffle two vectors.<br \/>  HANDLE_OTHER_INST(56, ExtractValue, ExtractValueInst)\/\/ extract from aggregate<br \/>  HANDLE_OTHER_INST(57, InsertValue, InsertValueInst) \/\/ insert into aggregate<br \/>  HANDLE_OTHER_INST(58, LandingPad, LandingPadInst) \/\/ Landing pad instruction.<br \/>   LAST_OTHER_INST(58)  <\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439:<br \/>  <a href=\"https:\/\/github.com\/wks\/llvm-cheatsheet\/blob\/master\/llvm-cheatsheet.md\">LLVM-CheatSheet<\/a><br \/>  <a href=\"http:\/\/llvm.org\/docs\/ProgrammersManual.html\">LLVM Programmers Manual<\/a><br \/>  <a href=\"http:\/\/www.cs.sfu.ca\/~anoop\/teaching\/CMPT-379-Fall-2013\/decafLLVM.pdf\">LLVM-CheatSheet 2<\/a><br \/>  <a href=\"http:\/\/jonathan2251.github.io\/lbd\/TutorialLLVMBackendCpu0.pdf\">LLVMBackendCPU<\/a><br \/>  <a href=\"http:\/\/ac.inf.elte.hu\/Vol_030_2009\/003.pdf\">Obfuscating c++ programs via CFG<\/a><\/p>\n<p>  C\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f.<br \/>  1) <a href=\"https:\/\/github.com\/obfuscator-llvm\/obfuscator\/branches\">Obfuscator-llvm<\/a><br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0443\u043f\u043b\u043e\u0442\u043d\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<br \/>  2) <a href=\"https:\/\/github.com\/0vercl0k\/stuffz\/tree\/master\/llvm-funz\">Kryptonite<\/a><br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \/ \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<h4>\u0421\u043d\u0438\u043f\u043f\u0435\u0442\u044b<\/h4>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0441\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/llvm.org\/docs\/doxygen\/html\/classllvm_1_1InlineAsm.html\">llvm::InlineAsm<\/a> \u0438\u043b\u0438 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 <a href=\"http:\/\/llvm.org\/docs\/WritingAnLLVMPass.html#the-machinefunctionpass-class\">MachinePass<\/a>, \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u0442\u044c <a href=\"https:\/\/raw.github.com\/securesystemslab\/multicompiler\/1ca4edd441ed190ebe42becedf833ec50bf2fc65\/lib\/Target\/X86\/NOPInsertion.cpp\">\u0442\u0443\u0442.<\/a> <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u0430\u043a \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0444\u0430\u0439\u043b?  <\/p>\n<pre><code class=\"cpp\">std::string file = &quot;1.bc&quot;; std::string ErrorInfo; llvm::LLVMContext context; llvm::MemoryBuffer::getFile(file.c_str(), bytecode); llvm::Module *module = llvm::ParseBitcodeFile(bytecode.get(), context, &error); <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435?  <\/p>\n<pre><code class=\"cpp\">for (auto i = module-&gt;getFunctionList().begin(); i != module-&gt;getFunctionList().end(); ++i)    {        printf(&quot;Function %s&quot;,i-&gt;getName().str());    } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438?  <\/p>\n<pre><code class=\"cpp\">if (llvm::isa&lt;llvm::BranchInst&gt;(currentInstruction))    printf(&quot;BranchInst!&quot;); <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439?  <\/p>\n<pre><code class=\"cpp\">llvm::BasicBlock *block = (\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f) block-&gt;replaceAllUsesWith(\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c); <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043a \u0434\u0440\u0443\u0433\u043e\u0439?  <\/p>\n<pre><code class=\"cpp\">llvm::Instruction* test = basicBlock-&gt;getTerminator(); llvm::BranchInst* branchInst =  llvm::dyn_cast&lt;llvm::BranchInst&gt;(test) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u043d\u0435 <a href=\"http:\/\/llvm.org\/docs\/LangRef.html#id938\">phi<\/a> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u0435?  <\/p>\n<pre><code class=\"cpp\">llvm::Instruction *inst =  currentInstruction-&gt;getParent()-&gt;getFirstNonPHI() <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438?  <\/p>\n<pre><code class=\"cpp\">   for(llvm::inst_iterator i = inst_begin(function); i != inst_end(function); i++)    {       llvm::Instruction* inst = &*i;    }  <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0433\u0434\u0435 \u0442\u043e \u0435\u0449\u0435?  <\/p>\n<pre><code class=\"cpp\">bool IsUsedOutsideParentBlock(llvm::Instruction* inst) {    for(llvm::inst::use_iterator i = inst-&gt;use_begin(); i != inst-&gt;use_end(); i++)    {       llvm::User* user = *i;       if(llvm::cast&lt;llvm::Instruction&gt;(user)-&gt;getParent() != inst-&gt;getParent())          return true;    }    return false;  } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\/\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f InvokeInst \u0438 \u0434\u0440\u0443\u0433\u0438\u0435?  <\/p>\n<pre><code class=\"cpp\">invokeInst-&gt;getSuccessor(0); \/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a. invokeInst-&gt;setSuccessor(0,basicBlock); \/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c. <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h4>\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/h4>\n<p>  Q: \u0427\u0442\u043e \u043d\u0430 \u0441\u0447\u0435\u0442 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438?<br \/>  A: \u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0441, \u0435\u0441\u0442\u044c <a href=\"http:\/\/opticode.coseinc.com\/\">\u043f\u0440\u043e\u0435\u043a\u0442<\/a> \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 LLVM \u0434\u043b\u044f \u0441\u043d\u044f\u0442\u0438\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438.<br \/>  Q: \u041a\u0430\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430?<br \/>  A: <code>clang -emit-llvm -o 1.bc -c 1.c <\/code><br \/>  Q: \u041a\u0430\u043a \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434?<br \/>  A: <code>clang -o 1 1.bc<\/code><br \/>  Q: \u041a\u0430\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c asm \u0444\u0430\u0439\u043b \u0438\u0437 LLVM IR \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f?<br \/>  A: <code>llc foo.ll<\/code><br \/>  Q: \u041a\u0430\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c IR \u0444\u0430\u0439\u043b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430?<br \/>  A: <code>clang -S -emit-llvm 1.c<\/code><br \/>  Q: \u041a\u0430\u043a \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c .s \u0444\u0430\u0439\u043b(\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440)?<br \/>  A: <code>gcc -o exe 1.s<\/code><br \/>  Q: \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c obj \u0444\u0430\u0439\u043b \u0438\u0437 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430?<br \/>  A: <code>llc -filetype=obj 1.bc<\/code><br \/>  Q: \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0441 LLVM api \u0434\u043b\u044f cpp \u0444\u0430\u0439\u043b\u0430?<br \/>  A: clang++ -c -emit-llvm 1.cpp -o 1.ll \u0437\u0430\u0442\u0435\u043c <code>llc -march=cpp -o 1.ll.cpp 1.ll<\/code><br \/>  Q: \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b clang \u043f\u043e\u0434 windows, \u0430 \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u0430\u043a \u043b\u0435\u0447\u0438\u0442\u044c?<br \/>  A: \u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 InitHeaderSearch.cpp \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0443\u0442\u0438, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 AddMinGWCPlusPlusIncludePaths,AddMinGW64CXXPaths.<br \/>  Q: Clang \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0432\u0438\u0437\u0443\u0430\u043b \u0441\u0442\u0443\u0434\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e?<br \/>  A: \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 C-\u043a\u043e\u0434.<br \/>  Q: GCC \u0441 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0435\u0442 \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\/\u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?<br \/>  A: \u0412\u0430\u0448\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044b \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 clang, \u0432 <a href=\"http:\/\/llvm.org\/docs\/doxygen\/html\/PassManagerBuilder_8cpp_source.html#l00127\">\u044d\u0442\u043e\u0442<\/a> cpp \u0444\u0430\u0439\u043b. \u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u044b\u0439, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c -O0    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/213259\/\"> http:\/\/habrahabr.ru\/post\/213259\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/2de\/4f5\/161\/2de4f51619cf10fb063263e52af20c8e.png\" alt=\"image\" align=\"left\"\/><br \/>  \u041d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f LLVM. \u041c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0440\u0435\u0445\u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-213259","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/213259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213259"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/213259\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=213259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=213259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}