{"id":264915,"date":"2015-09-04T01:33:02","date_gmt":"2015-09-03T21:33:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264915"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264915","title":{"rendered":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435"},"content":{"rendered":"<p>       \u0420\u0435\u0448\u0438\u043b \u044f \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u043a\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043f\u0440\u0438 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 1 \u041c\u0431. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0451\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0418 \u0432\u043e\u0442, \u0447\u0442\u043e \u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b.<\/p>\n<h4>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/h4>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041b\u0443\u0447\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u2013 &quot;<a href=\"http:\/\/habrahabr.ru\/post\/265509\/\">\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/a>&quot; <\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0430\u0442\u044c\u044e, \u044f \u043c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438: \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043b\u0438 \u043e\u0431\u044a\u0451\u043c \u043a\u0443\u0447\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043e 1 \u041c\u0431 \u2013 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u044f\u0434\u0440\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u0430 \u043a\u0443\u0447\u0438. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u043e\u0437\u043d\u044e \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u043e\u043c. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u044d\u0442\u043e \u0431\u044b\u043b \u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0447\u0435\u0440\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u00ab\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b\u00bb.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 big_alloc, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0449\u0443\u044e, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0449\u0443\u044e 100 MiB.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;stdbool.h&gt;  \/\/ 1000 \u0440\u0430\u0437 \u043f\u043e 100 KiB = 100 000 KiB = 100 MiB #define NALLOCS 1000 #define ALLOC_SIZE 1024*100 \/\/ 100 KiB  int main(int argc, const char *argv[]) {     int i = 0;     int **pp;     bool failed = false;      pp = malloc(NALLOCS * sizeof(int *));     for(i = 0; i &lt; NALLOCS; i++)     {         pp[i] = malloc(ALLOC_SIZE);         if (!pp[i])         {             perror(&quot;malloc&quot;);             printf(&quot;\u041e\u0431\u043b\u043e\u043c \u043f\u043e\u0441\u043b\u0435 %d \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0439\\n&quot;, i);             failed = true;             break;         }         \/\/ \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0431\u0430\u0439\u0442\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c copy-on-write.         memset(pp[i], 0xA, 100);         printf(&quot;pp[%d] = %p\\n&quot;, i, pp[i]);     }      if (!failed)         printf(&quot;\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 %d \u0431\u0430\u0439\u0442\u043e\u0432\\n&quot;, NALLOCS * ALLOC_SIZE);      for(i = 0; i &lt; NALLOCS; i++)     {         if (pp[i])             free(pp[i]);     }     free(pp);      return 0; } <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0435\u0441\u0442\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/dzeban\/restrict-memory\">github<\/a>.<\/p>\n<h4>ulimit<\/h4>\n<p>  \u0422\u043e, \u043e \u0447\u0451\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 unix-\u0445\u0430\u043a\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c. \u042d\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0438\u0437 bash, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041d\u0430 \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a setrlimit.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre><code class=\"bash\">$ ulimit -m 1024 <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<pre><code class=\"bash\">$ ulimit -a core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited scheduling priority             (-e) 0 file size               (blocks, -f) unlimited pending signals                 (-i) 7802 max locked memory       (kbytes, -l) 64 max memory size         (kbytes, -m) 1024 open files                      (-n) 1024 pipe size            (512 bytes, -p) 8 POSIX message queues     (bytes, -q) 819200 real-time priority              (-r) 0 stack size              (kbytes, -s) 8192 cpu time               (seconds, -t) unlimited max user processes              (-u) 1024 virtual memory          (kbytes, -v) unlimited file locks                      (-x) unlimited <\/code><\/pre>\n<p>  \u041c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 1024 \u043a\u0431 \u2014 1 MiB. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043e\u043d\u0430 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043b\u0438\u043c\u0438\u0442 \u0432 1024 \u043a\u0431, \u0432 top \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0430\u0436 4872 \u043a\u0431.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Linux \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u0438 \u0432 man \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e:<\/p>\n<pre><code class=\"bash\">ulimit [-HSTabcdefilmnpqrstuvx [limit]]     ...     -m     The maximum resident set size (many systems do not honor this limit) <\/code><\/pre>\n<p>  \u2026<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0446\u0438\u044f ulimit -d, \u043a\u043e\u0442\u043e\u0440\u0430\u044f <a href=\"http:\/\/lxr.free-electrons.com\/source\/mm\/mmap.c?v=3.16#L290\">\u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/a>, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 mmap (\u0441\u043c. \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a).<\/p>\n<h4>QEMU<\/h4>\n<p>  \u0414\u043b\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c QEMU \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u0423 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u044f \u2013R \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u041d\u043e \u0434\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0435\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u2013 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u044f\u0442\u0441\u044f libc \u0438 kernel.<\/p>\n<p>  \u0413\u043b\u044f\u0434\u0438\u0442\u0435:<\/p>\n<pre><code class=\"bash\">$ qemu-i386 -R 1048576 .\/big_alloc big_alloc: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory <\/code><\/pre>\n<p>  \u0422\u0443\u0442 -R 1048576 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1 MiB \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u0442\u0432\u0435\u0441\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 20 MB. \u0412\u043e\u0442:<\/p>\n<pre><code class=\"bash\">$ qemu-i386 -R 20M .\/big_alloc malloc: Cannot allocate memory Failed after 100 allocations <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 100 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (10 MB).<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, QEMU \u043f\u043e\u043a\u0430 \u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0441\u0440\u0435\u0434\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u2013R.<\/p>\n<h4>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/h4>\n<p>  \u0415\u0449\u0451 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e:  <\/p>\n<ul>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c docker<\/li>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b usermode \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 lxc<\/li>\n<li>\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 libvirt.<\/li>\n<li>\u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451\u2026<\/li>\n<\/ul>\n<p>  \u041d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c cgroups. \u041c\u043e\u0436\u043d\u043e \u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043d\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0447\u0435\u0440\u0435\u0437 lxc. \u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c docker, \u043d\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<p>  LXC \u2014 \u044d\u0442\u043e LinuX Containers. \u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u0437 userspace \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u044f\u0434\u0440\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u2013 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0438\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:  <\/p>\n<ul>\n<li> Control groups (cgroups)<\/li>\n<li> Kernel namespaces<\/li>\n<li> chroot<\/li>\n<li> Kernel capabilities<\/li>\n<li> SELinux, AppArmor<\/li>\n<li> Seccomp policies<\/li>\n<\/ul>\n<p>  \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 <a href=\"https:\/\/linuxcontainers.org\/\">\u043e\u0444\u0441\u0430\u0439\u0442\u0435 <\/a>\u0438\u043b\u0438 \u0432 <a href=\"https:\/\/www.stgraber.org\/2013\/12\/20\/lxc-1-0-blog-post-series\/\">\u0431\u043b\u043e\u0433\u0435 \u0430\u0432\u0442\u043e\u0440\u0430<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c lxc-execute \u043a\u043e\u043d\u0444\u0438\u0433, \u0433\u0434\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041d\u0430\u0447\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432 \/usr\/share\/doc\/lxc\/examples. Man \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 lxc-macvlan.conf. \u041d\u0430\u0447\u043d\u0451\u043c:<\/p>\n<pre><code class=\"bash\"># cp \/usr\/share\/doc\/lxc\/examples\/lxc-macvlan.conf lxc-my.conf # lxc-execute -n foo -f .\/lxc-my.conf .\/big_alloc Successfully allocated 102400000 bytes <\/code><\/pre>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 cgroup. LXC \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f cgroup \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0437\u0430\u0434\u0430\u0432\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/access.redhat.com\/documentation\/en-US\/Red_Hat_Enterprise_Linux\/6\/html\/Resource_Management_Guide\/sec-memory.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e RedHat<\/a>. \u042f \u043d\u0430\u0448\u0451\u043b 2:<\/p>\n<ul>\n<li> memory.limit_in_bytes \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043a\u044d\u0448<\/li>\n<li> memory.memsw.limit_in_bytes \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432 \u0441\u0443\u043c\u043c\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0441\u0432\u043e\u043f\u0430<\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 lxc-my.conf:<\/p>\n<pre><code class=\"bash\">lxc.cgroup.memory.limit_in_bytes = 2M lxc.cgroup.memory.memsw.limit_in_bytes = 2M <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\"># lxc-execute -n foo -f .\/lxc-my.conf .\/big_alloc # <\/code><\/pre>\n<p>  \u0422\u0438\u0448\u0438\u043d\u0430 \u2013 \u0432\u0438\u0434\u0438\u043c\u043e, \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437 \u0448\u0435\u043b\u043b\u0430<\/p>\n<pre><code class=\"bash\"># lxc-execute -n foo -f .\/lxc-my.conf \/bin\/bash # <\/code><\/pre>\n<p>  bash \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \/bin\/sh:<\/p>\n<pre><code class=\"bash\"># lxc-execute -n foo -f .\/lxc-my.conf -l DEBUG -o log \/bin\/sh sh-4.2# .\/dev\/big_alloc\/big_alloc  Killed <\/code><\/pre>\n<p>  \u0418 \u0432 dmesg \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0441\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u043c\u0435\u0440\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:<\/p>\n<pre><code class=\"bash\">[15447.035569] big_alloc invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0 ... [15447.035779] Task in \/lxc\/foo [15447.035785]  killed as a result of limit of  [15447.035789] \/lxc\/foo  [15447.035795] memory: usage 3072kB, limit 3072kB, failcnt 127 [15447.035800] memory+swap: usage 3072kB, limit 3072kB, failcnt 0 [15447.035805] kmem: usage 0kB, limit 18014398509481983kB, failcnt 0 [15447.035808] Memory cgroup stats for \/lxc\/foo: cache:32KB rss:3040KB rss_huge:0KB mapped_file:0KB writeback:0KB swap:0KB inactive_anon:1588KB active_anon:1448KB inactive_file:16KB active_file:16KB unevictable:0KB [15447.035836] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name [15447.035963] [ 9225]     0  9225      942      308      10        0 0 init.lxc [15447.035971] [ 9228]     0  9228      833      698       6        0 0 sh [15447.035978] [ 9252]     0  9252    16106      843      36        0 0 big_alloc [15447.035983] Memory cgroup out of memory: Kill process 9252 (big_alloc) score 1110 or sacrifice child [15447.035990] Killed process 9252 (big_alloc) total-vm:64424kB, anon-rss:2396kB, file-rss:976kB <\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u043c\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043e\u0442 big_alloc \u043d\u0430\u0441\u0447\u0451\u0442 malloc failure \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c<\/p>\n<h4>\u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a<\/h4>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u043a\u0443\u0447\u0435 \u043c\u0435\u0441\u0442\u043e. \u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430 \u2013 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0438 \u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442. \u0421\u043a\u0440\u0438\u043f\u0442 \u2013 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">ENTRY(main)  SECTIONS {   . = 0x10000;   .text : { *(.text) }   . = 0x8000000;   .data : { *(.data) }   .bss : { *(.bss) } } <\/code><\/pre>\n<p>  \u0422\u043e\u0447\u043a\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u0434\u0435\u043b .text \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 0\u00d710000, \u0430 \u0437\u0430\u0442\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0\u00d78000000 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430: .data \u0438 .bss. \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u2014 main.<\/p>\n<p>  \u0412\u0441\u0451 \u043a\u0440\u0443\u0442\u043e, \u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f main, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0430 \u0421, \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439. \u0421\u043f\u0435\u0440\u0432\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0438 \u043f\u043e\u0434\u0447\u0438\u0441\u0442\u043e\u043a. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0421 (crt) \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c crt#.o \u0432 \/usr\/lib.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 gcc \u2013v. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 ccl, \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 as \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 ELF \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 collect2. collect2 \u2014 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 ld. \u041e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 5 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437:<\/p>\n<pre><code class=\"bash\">    \/usr\/lib\/gcc\/i686-redhat-linux\/4.8.3\/.\/.\/.\/crt1.o     \/usr\/lib\/gcc\/i686-redhat-linux\/4.8.3\/.\/.\/.\/crti.o     \/usr\/lib\/gcc\/i686-redhat-linux\/4.8.3\/crtbegin.o     \/tmp\/ccEZwSgF.o &lt;- \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b     \/usr\/lib\/gcc\/i686-redhat-linux\/4.8.3\/crtend.o     \/usr\/lib\/gcc\/i686-redhat-linux\/4.8.3\/.\/.\/.\/crtn.o <\/code><\/pre>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u044e \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0435\u0433\u043e, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 -Wl,-verbose \u0432 gcc:<\/p>\n<pre><code class=\"bash\">gcc big_alloc.c -o big_alloc -Wl,-verbose <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0438 \u043f\u043e\u0438\u0449\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 .data. \u0412\u043e\u0442 \u0432\u044b\u0434\u0430\u0447\u0430 objdump -h big_alloc <\/p>\n<pre><code class=\"bash\">Sections: Idx Name          Size      VMA       LMA       File off  Algn ... 12 .text         000002e4  080483e0  080483e0  000003e0  2**4                  CONTENTS, ALLOC, LOAD, READONLY, CODE ... 23 .data         00000004  0804a028  0804a028  00001028  2**2                  CONTENTS, ALLOC, LOAD, DATA 24 .bss          00000004  0804a02c  0804a02c  0000102c  2**2                  ALLOC <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0434\u0435\u043b\u044b .text, .data \u0438 .bss \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043e\u043a\u043e\u043b\u043e 128 MiB.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0433\u0434\u0435 \u0441\u0442\u0435\u043a, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 gdb:<\/p>\n<pre><code class=\"bash\">[restrict-memory]$ gdb big_alloc  ... Reading symbols from big_alloc...done. (gdb) break main Breakpoint 1 at 0x80484fa: file big_alloc.c, line 12. (gdb) r Starting program: \/home\/avd\/dev\/restrict-memory\/big_alloc   Breakpoint 1, main (argc=1, argv=0xbffff164) at big_alloc.c:12 12              int i = 0; Missing separate debuginfos, use: debuginfo-install glibc-2.18-16.fc20.i686 (gdb) info registers  eax            0x1      1 ecx            0x9a8fc98f       -1701852785 edx            0xbffff0f4       -1073745676 ebx            0x42427000       1111650304 esp            0xbffff0a0       0xbffff0a0 ebp            0xbffff0c8       0xbffff0c8 esi            0x0      0 edi            0x0      0 eip            0x80484fa        0x80484fa &lt;main+10&gt; eflags         0x286    [ PF SF IF ] cs             0x73     115 ss             0x7b     123 ds             0x7b     123 es             0x7b     123 fs             0x0      0 gs             0x33     51 <\/code><\/pre>\n<p>  esp \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 0xbffff0a0, \u0447\u0442\u043e \u043e\u043a\u043e\u043b\u043e 3 GiB. \u0417\u043d\u0430\u0447\u0438\u0442, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u0432 ~2.9 GiB.<\/p>\n<p>  \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0435\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u044b\u0434\u0430\u0447\u0435<\/p>\n<pre><code class=\"bash\"># cat \/proc\/self\/maps <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u043a\u0443\u0447\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u043e\u0442 \u043a\u043e\u043d\u0446\u0430 .data \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043a \u0441\u0442\u0435\u043a\u0443. \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0434\u0432\u0438\u043d\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b .data \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0448\u0435?<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 2 MiB \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0435\u043a\u043e\u043c. \u0411\u0435\u0440\u0451\u043c \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430, \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 2 MiB:<\/p>\n<p>  0xbffff0a0 \u2014 0x200000 = 0xbfdff0a0 <\/p>\n<p>  \u0421\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 .data \u043d\u0430 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441:<\/p>\n<pre><code class=\"cpp\">. =     0xbfdff0a0 .data           : {   *(.data .data.* .gnu.linkonce.d.*)   SORT(CONSTRUCTORS) } <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c:<\/p>\n<pre><code class=\"bash\">$ gcc big_alloc.c -o big_alloc -Wl,-T hack.lst <\/code><\/pre>\n<p>  \u041e\u043f\u0446\u0438\u0438 -Wl \u0438 -T hack.lst \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b hack.lst \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a:<\/p>\n<pre><code class=\"bash\">\u0420\u0430\u0437\u0434\u0435\u043b\u044b: Idx Name          Size      VMA       LMA       File off  Algn   ...   23 .data         00000004  bfdff0a0  bfdff0a0  000010a0  2**2                   CONTENTS, ALLOC, LOAD, DATA  24 .bss          00000004  bfdff0a4  bfdff0a4  000010a4  2**2                   ALLOC <\/code><\/pre>\n<p>  \u0418 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041a\u0430\u043a? \u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 malloc, \u044f \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0430.data \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0432\u0440\u043e\u0434\u0435 0xbf8b7000, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0438\u0436\u043d\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0432\u0440\u043e\u0434\u0435 0xb5e76000. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u043a\u0443\u0447\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u0432\u043d\u0438\u0437.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 glibc \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 brk \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f mmap. \u0417\u043d\u0430\u0447\u0438\u0442, glibc \u043f\u0440\u043e\u0441\u0438\u0442 \u044f\u0434\u0440\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u044f\u0434\u0440\u043e \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u0443\u0447\u0430 \u0434\u044b\u0440 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0443\u0441\u0442\u044b\u0445 \u043c\u0435\u0441\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e glibc \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441 \u043d\u0435\u0451.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a big_alloc \u043f\u043e\u0434 strace \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b \u0442\u0435\u043e\u0440\u0438\u044e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a:<\/p>\n<pre><code class=\"bash\">brk(0)                                  = 0x8135000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77df000 mmap2(NULL, 95800, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb77c7000 mmap2(0x4226d000, 1825436, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4226d000 mmap2(0x42425000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b8000) = 0x42425000 mmap2(0x42428000, 10908, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x42428000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77c6000 mprotect(0x42425000, 8192, PROT_READ)   = 0 mprotect(0x8049000, 4096, PROT_READ)    = 0 mprotect(0x42269000, 4096, PROT_READ)   = 0 munmap(0xb77c7000, 95800)               = 0 brk(0)                                  = 0x8135000 brk(0x8156000)                          = 0x8156000 brk(0)                                  = 0x8156000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77de000 brk(0)                                  = 0x8156000 brk(0x8188000)                          = 0x8188000 brk(0)                                  = 0x8188000 brk(0x81ba000)                          = 0x81ba000 brk(0)                                  = 0x81ba000 brk(0x81ec000)                          = 0x81ec000 ... brk(0)                                  = 0x9c19000 brk(0x9c4b000)                          = 0x9c4b000 brk(0)                                  = 0x9c4b000 brk(0x9c7d000)                          = 0x9c7d000 brk(0)                                  = 0x9c7d000 brk(0x9caf000)                          = 0x9caf000 ... brk(0)                                  = 0xe29c000 brk(0xe2ce000)                          = 0xe2ce000 brk(0)                                  = 0xe2ce000 brk(0xe300000)                          = 0xe300000 brk(0)                                  = 0xe300000 brk(0)                                  = 0xe300000 brk(0x8156000)                          = 0x8156000 brk(0)                                  = 0x8156000 +++ exited with 0 +++ <\/code><\/pre>\n<p>  \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439:<\/p>\n<pre><code class=\"bash\">brk(0)                                  = 0xbf896000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb778f000 mmap2(NULL, 95800, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7777000 mmap2(0x4226d000, 1825436, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4226d000 mmap2(0x42425000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b8000) = 0x42425000 mmap2(0x42428000, 10908, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x42428000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7776000 mprotect(0x42425000, 8192, PROT_READ)   = 0 mprotect(0x8049000, 4096, PROT_READ)    = 0 mprotect(0x42269000, 4096, PROT_READ)   = 0 munmap(0xb7777000, 95800)               = 0 brk(0)                                  = 0xbf896000 brk(0xbf8b7000)                         = 0xbf8b7000 brk(0)                                  = 0xbf8b7000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb778e000 brk(0)                                  = 0xbf8b7000 brk(0xbf8e9000)                         = 0xbf8e9000 brk(0)                                  = 0xbf8e9000 brk(0xbf91b000)                         = 0xbf91b000 brk(0)                                  = 0xbf91b000 brk(0xbf94d000)                         = 0xbf94d000 brk(0)                                  = 0xbf94d000 brk(0xbf97f000)                         = 0xbf97f000 ... brk(0)                                  = 0xbff8e000 brk(0xbffc0000)                         = 0xbffc0000 brk(0)                                  = 0xbffc0000 brk(0xbfff2000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7676000 brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7576000 brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7476000 brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7376000 ... brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb1c76000 brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb1b76000 brk(0)                                  = 0xbffc0000 brk(0xbfffa000)                         = 0xbffc0000 mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb1a76000 brk(0)                                  = 0xbffc0000 brk(0)                                  = 0xbffc0000 brk(0)                                  = 0xbffc0000 ... brk(0)                                  = 0xbffc0000 brk(0)                                  = 0xbffc0000 brk(0)                                  = 0xbffc0000 +++ exited with 0 +++ <\/code><\/pre>\n<p>  \u0421\u0434\u0432\u0438\u0433 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 .data \u043a \u0441\u0442\u0435\u043a\u0443 \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043a\u0443\u0447\u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f\u0434\u0440\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u043f\u0443\u0441\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<h4>\u041f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430<\/h4>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2014 sandboxing. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0435\u0433\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043d\u0430\u043d\u0451\u0441 \u0432\u0440\u0435\u0434\u0430 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<h5>\u0422\u0440\u044e\u043a \u0441 LD_PRELOAD <\/h5>\n<p>  LD_PRELOAD \u2013 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0432 \u0442.\u0447. libc. \u042d\u0442\u043e\u0442 \u0442\u0440\u044e\u043a, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438 <a href=\"http:\/\/blog.malwaremustdie.org\/2014\/05\/elf-shared-so-dynamic-library-malware.html\">\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u044b<\/a>.<\/p>\n<p>  \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443, \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0432\u044b\u0437\u043e\u0432\u044b malloc\/free, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e ENOMEM \u043f\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044e \u043b\u0438\u043c\u0438\u0442\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (shared library) c \u043c\u043e\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u043e\u043a\u0440\u0443\u0433 malloc\/free, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 \u043e\u0431\u044a\u0451\u043c malloc, \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0438\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f free. \u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 LD_PRELOAD.<\/p>\n<p>  \u041c\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f malloc<\/p>\n<pre><code class=\"cpp\">void *malloc(size_t size) {     void *p = NULL;      if (libc_malloc == NULL)          save_libc_malloc();      if (mem_allocated &lt;= MEM_THRESHOLD)     {         p = libc_malloc(size);     }     else     {         errno = ENOMEM;         return NULL;     }      if (!no_hook)      {         no_hook = 1;         account(p, size);         no_hook = 0;     }      return p; } <\/code><\/pre>\n<p>  libc_malloc \u2013 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 malloc \u0438\u0437 libc. no_hook \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c malloc \u0432 \u0445\u0443\u043a\u0430\u0445 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p>  malloc \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u044f\u0432\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 account \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <a href=\"http:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a>. \u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0445\u0435\u0448\u0435\u0439? \u041f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 free \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0435 \u0432 \u043d\u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 free \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438-\u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0434\u0435\u043b\u0430\u044e \u0432 malloc:<\/p>\n<pre><code class=\"cpp\">struct malloc_item *item, *out;  item = malloc(sizeof(*item)); item-&gt;p = ptr; item-&gt;size = size;  HASH_ADD_PTR(HT, p, item);  mem_allocated += size;  fprintf(stderr, &quot;Alloc: %p -&gt; %zu\\n&quot;, ptr, size); <\/code><\/pre>\n<p>  mem_allocated \u044d\u0442\u043e \u0442\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432 malloc.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 free \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">struct malloc_item *found;  HASH_FIND_PTR(HT, &ptr, found); if (found) {     mem_allocated -= found-&gt;size;     fprintf(stderr, &quot;Free: %p -&gt; %zu\\n&quot;, found-&gt;p, found-&gt;size);     HASH_DEL(HT, found);     free(found); } else {     fprintf(stderr, &quot;Freeing unaccounted allocation %p\\n&quot;, ptr); } <\/code><\/pre>\n<p>  \u0414\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c mem_allocated.<\/p>\n<p>  \u0418 \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043a\u0440\u0443\u0442\u043e\u0435 \u2013 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<pre><code class=\"bash\">[restrict-memory]$ LD_PRELOAD=.\/libmemrestrict.so .\/big_alloc pp[0] = 0x25ac210 pp[1] = 0x25c5270 pp[2] = 0x25de2d0 pp[3] = 0x25f7330 pp[4] = 0x2610390 pp[5] = 0x26293f0 pp[6] = 0x2642450 pp[7] = 0x265b4b0 pp[8] = 0x2674510 pp[9] = 0x268d570 pp[10] = 0x26a65d0 pp[11] = 0x26bf630 pp[12] = 0x26d8690 pp[13] = 0x26f16f0 pp[14] = 0x270a750 pp[15] = 0x27237b0 pp[16] = 0x273c810 pp[17] = 0x2755870 pp[18] = 0x276e8d0 pp[19] = 0x2787930 pp[20] = 0x27a0990 malloc: Cannot allocate memory Failed after 21 allocations <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/dzeban\/restrict-memory\/blob\/master\/memrestrict.c\">github<\/a><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e LD_PRELOAD \u2013 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c<\/p>\n<h5>ptrace<\/h5>\n<p>  ptrace \u2013 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b. \u042d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0412\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 POSIX \u041e\u0421.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432, \u043a\u0430\u043a strace, ltrace, \u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446 \u2014 systrace, sydbox, mbox \u0438 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f gdb.<\/p>\n<p>  \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ptrace. \u041e\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u044b brk \u0438 \u043c\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c break \u0438 \u043d\u043e\u0432\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c brk.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0444\u043e\u0440\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 2 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u2013 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u2013 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439. \u0412 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e ptrace(PTRACE_TRACEME) \u0438 \u0437\u0430\u0442\u0435\u043c execv. \u0412 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ptrace(PTRACE_SYSCALL) \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 syscall \u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b brk \u0438\u0437 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d ptrace(PTRACE_SYSCALL) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e brk.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 brk \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e -ENOMEM \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f brk. \u042d\u0442\u043e \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 eax, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0435\u0433\u043e \u0441 ptrace(PTRACE_SETREGS). \u0412\u043e\u0442 \u0441\u0430\u043c\u0430\u044f \u0432\u043a\u0443\u0441\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">\/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 if (!syscall_trace(pid, &state)) {     dbg(&quot;brk return: 0x%08X, brk_start 0x%08X\\n&quot;, state.eax, brk_start);      if (brk_start) \/\/ We have start of brk     {         diff = state.eax - brk_start;          \/\/ \u0415\u0441\u043b\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435          \/\/ \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 brk \u043d\u0430 -ENOMEM         if (diff &gt; THRESHOLD || threshold)          {             dbg(&quot;THRESHOLD!\\n&quot;);             threshold = true;             state.eax = -ENOMEM;             ptrace(PTRACE_SETREGS, pid, 0, &state);         }         else         {             dbg(&quot;diff 0x%08X\\n&quot;, diff);         }     }     else     {         dbg(&quot;Assigning 0x%08X to brk_start\\n&quot;, state.eax);         brk_start = state.eax;     } } <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e \u0432\u044b\u0437\u043e\u0432\u044b mmap\/mmap2, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 libc \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043c\u043e\u0437\u0433\u043e\u0432 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0441 brk. \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u0438 \u044f \u0432\u0438\u0436\u0443 \u0432\u044b\u0437\u043e\u0432 mmap, \u044f \u043e\u0431\u043b\u0430\u043c\u044b\u0432\u0430\u044e \u0435\u0433\u043e \u0441 ENOMEM.<\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<pre><code class=\"bash\">[restrict-memory]$ .\/ptrace-restrict .\/big_alloc pp[0] = 0x8958fb0 pp[1] = 0x8971fb8 pp[2] = 0x898afc0 pp[3] = 0x89a3fc8 pp[4] = 0x89bcfd0 pp[5] = 0x89d5fd8 pp[6] = 0x89eefe0 pp[7] = 0x8a07fe8 pp[8] = 0x8a20ff0 pp[9] = 0x8a39ff8 pp[10] = 0x8a53000 pp[11] = 0x8a6c008 pp[12] = 0x8a85010 pp[13] = 0x8a9e018 pp[14] = 0x8ab7020 pp[15] = 0x8ad0028 pp[16] = 0x8ae9030 pp[17] = 0x8b02038 pp[18] = 0x8b1b040 pp[19] = 0x8b34048 pp[20] = 0x8b4d050 malloc: Cannot allocate memory Failed after 21 allocations <\/code><\/pre>\n<p>  \u041d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u042d\u0442\u043e \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043e \u043d\u0430 ABI, \u0442.\u0435. \u0442\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c rax \u0432\u043c\u0435\u0441\u0442\u043e eax \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c #ifdef, \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e -m32 option. \u0418 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 POSIX-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 ABI.<\/p>\n<h4>\u0418\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b<\/h4>\n<p>  \u0427\u0442\u043e \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c (\u044d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043e\u0442\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044b \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c):<\/p>\n<ul>\n<li><a href=\"http:\/\/www.gnu.org\/software\/libc\/manual\/html_node\/Hooks-for-Malloc.html\">\u0445\u0443\u043a\u0438 malloc<\/a>. \u0412 man \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f<\/li>\n<li><a href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/prctl.2.html\">Seccomp \u0438 prctl <\/a>\u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 PR_SET_MM_START_BRK. \u041c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u2013 \u043d\u043e, \u043a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 <a href=\"http:\/\/lxr.free-electrons.com\/source\/Documentation\/prctl\/seccomp_filter.txt\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>, \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430, \u0430 \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u044f\u0434\u0440\u0430. \u0422\u043e \u0435\u0441\u0442\u044c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0438\u0432\u043e, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0439 ptrace<\/li>\n<li><a href=\"http:\/\/sandbox.libvirt.org\/quickstart\/\">libvirt-sandbox<\/a>. \u0412\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0434\u043b\u044f lxc \u0438 qemu.<\/li>\n<li><a href=\"http:\/\/linux.die.net\/man\/8\/sandbox\">SELinux sandbox<\/a>. \u041d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 cgroup.<\/li>\n<\/ul>\n<h4>\u0421\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  <\/p>\n<ul>\n<li> <a href=\"http:\/\/habrahabr.ru\/post\/265509\/\">\u0421\u0442\u0430\u0442\u044c\u044f Gustavo Duarte <\/a><\/li>\n<li> <a href=\"http:\/\/coldattic.info\/shvedsky\/pro\/blogs\/a-foo-walks-into-a-bar\/posts\/40\">Limiting time and memory consumption of a program in Linux<\/a>.<\/li>\n<li> <a href=\"http:\/\/stackoverflow.com\/questions\/4249063\/run-an-untrusted-c-program-in-a-sandbox-in-linux-that-prevents-it-from-opening-f\">Linux sandboxing<\/a><\/li>\n<\/ul>\n<div class=\"clear\"><\/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\/266083\/\"> http:\/\/habrahabr.ru\/post\/266083\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0420\u0435\u0448\u0438\u043b \u044f \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u043a\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043f\u0440\u0438 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 1 \u041c\u0431. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0451\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0418 \u0432\u043e\u0442, \u0447\u0442\u043e \u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b.<\/p>\n<h4>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/h4>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041b\u0443\u0447\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u2013 &quot;<a href=\"http:\/\/habrahabr.ru\/post\/265509\/\">\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/a>&quot; <\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0430\u0442\u044c\u044e, \u044f \u043c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438: \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043b\u0438 \u043e\u0431\u044a\u0451\u043c \u043a\u0443\u0447\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043e 1 \u041c\u0431 \u2013 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u044f\u0434\u0440\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u0430 \u043a\u0443\u0447\u0438. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u043e\u0437\u043d\u044e \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u043e\u043c. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u044d\u0442\u043e \u0431\u044b\u043b \u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0447\u0435\u0440\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u00ab\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b\u00bb.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 big_alloc, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0449\u0443\u044e, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0449\u0443\u044e 100 MiB.  <\/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-264915","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264915","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=264915"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264915\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}