{"id":335729,"date":"2022-07-14T15:00:31","date_gmt":"2022-07-14T15:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=335729"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=335729","title":{"rendered":"<span>\u0423\u043a\u0440\u0430\u0448\u0430\u0435\u043c \u043c\u043e\u043b\u043e\u0442\u043e\u043a: \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u0435<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443. \u0423 \u043d\u0430\u0441 \u0432 \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u0427\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 <a href=\"https:\/\/kas.pr\/github-habr-kozlov\">\u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432<\/a>, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 JS-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f WinDBG \u0438 Python-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f GDB. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u0436\u0438\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0438 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xn\/uw\/rj\/xnuwrjzm19784qqfg5tkczcod2y.png\" alt=\"cover\" data-src=\"https:\/\/habrastorage.org\/webt\/xn\/uw\/rj\/xnuwrjzm19784qqfg5tkczcod2y.png\"\/><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u044532-\u0441\u0442\u0435\u043a\u0438<\/h2>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0443 \u043d\u0430\u0441 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u043c Windows. \u0422\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 100500 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0438\u043d\u0438\u0439 \u044d\u043a\u0440\u0430\u043d. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0435\u043b\u0430\u043b\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0435, \u0432 kernel mode \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e kernel\u2019\u043e\u0432\u044b\u0435 \u0441\u0442\u0435\u043a\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/z4\/pk\/bc\/z4pkbcjbpvryhcmawc5hjqowwng.jpeg\" alt=\"image1\" data-src=\"https:\/\/habrastorage.org\/webt\/z4\/pk\/bc\/z4pkbcjbpvryhcmawc5hjqowwng.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0435\u043a, \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u0443 \u043d\u0430\u0441 \u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 (\u043d\u0430 JavaScript) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044e\u0437\u0435\u0440\u043c\u043e\u0434\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u0445 \u0441\u0442\u0435\u043a\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/dn\/or\/cv\/dnorcvpmsnn4rcambai4zukrlue.jpeg\" alt=\"image2\" data-src=\"https:\/\/habrastorage.org\/webt\/dn\/or\/cv\/dnorcvpmsnn4rcambai4zukrlue.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u0442\u043d\u044e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cpp\">#include &lt;ctime> #include &lt;chrono> #include &lt;random>  #include &lt;thread> #include &lt;vector> #include &lt;iostream>  struct TaskA { enum { delay = 1000000 }; }; struct TaskB { enum { delay = 1100000 }; }; struct TaskC { enum { delay = 1200000 }; };  template &lt;typename T> __declspec(noinline) static void DoTask() {     std::this_thread::sleep_for(std::chrono::milliseconds(T::delay)); }  constexpr const int ThreadCount = 100;  int main() {     std::mt19937_64 randomGenerator(std::time(nullptr));     uint64_t a_level = randomGenerator();     uint64_t b_level = randomGenerator();     if (a_level == b_level)         b_level = randomGenerator();     if (a_level > b_level)         std::swap(a_level, b_level);     std::cout &lt;&lt; \"Levels: \" &lt;&lt; a_level &lt;&lt; \", \" &lt;&lt; b_level &lt;&lt; \"\\n\";      std::vector&lt;std::thread> threads;      std::cout &lt;&lt; \"Creating threads...\";     for (int i = 0; i &lt; ThreadCount; ++i) {         uint64_t rnd = randomGenerator();         if (rnd &lt; a_level)             threads.push_back(std::thread(DoTask&lt;TaskA>));         else if (rnd &lt; b_level)             threads.push_back(std::thread(DoTask&lt;TaskB>));         else             threads.push_back(std::thread(DoTask&lt;TaskC>));     }     std::cout &lt;&lt; \"done.\\n\";      std::cout &lt;&lt; \"Waiting for threads end...\";     for (auto&amp; thr : threads)         thr.join();     std::cout &lt;&lt; \"done.\\n\";      return 0; }<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043c\u043f\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ov\/ac\/y1\/ovacy1yry2sfqangqayxuswnjyy.jpeg\" alt=\"image3\" data-src=\"https:\/\/habrastorage.org\/webt\/ov\/ac\/y1\/ovacy1yry2sfqangqayxuswnjyy.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043a\u0440\u043e\u043c\u0435 kernel-\u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 !x32stacks \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u043e\u0442\u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/gc\/e3\/k7\/gce3k7lypprta8b62q_fdaeh9o4.jpeg\" alt=\"image4\" data-src=\"https:\/\/habrastorage.org\/webt\/gc\/e3\/k7\/gce3k7lypprta8b62q_fdaeh9o4.jpeg\" data-blurred=\"true\"\/><\/p>\n<h2>\u041f\u043e\u0438\u0441\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439<\/h2>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435, \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438\u0441\u044c \u0438\u043b\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e, \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 Windows \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0437\u0430\u043f\u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/xk\/mc\/5m\/xkmc5mgqdsuyhgxynwzxep-1wj4.jpeg\" alt=\"image5\" data-src=\"https:\/\/habrastorage.org\/webt\/xk\/mc\/5m\/xkmc5mgqdsuyhgxynwzxep-1wj4.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0449\u0443\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 CONTEXT. \u041e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0435\u0435 \u0438\u0449\u0443\u0442 \u043f\u043e \u0444\u043b\u0430\u0433\u0430\u043c \u043b\u0438\u0431\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c, \u0442\u043e \u0432\u044b\u0448\u0435 \u043f\u043e \u0441\u0442\u0435\u043a\u0443 \u0438\u0449\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 EXCEPTION_POINTERS. \u041e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f: \u043d\u0430 CONTEXT \u0438 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 EXCEPTION_RECORD. \u0410 EXCEPTION_RECORD \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438: \u043a\u043e\u0434 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0436\u0438\u0432\u0443\u044e, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre><code class=\"cpp\">#include &lt;exception>  class A { public:     A() {         throw(std::exception(\"It's too cold!\"));     } };  class B { public:     bool Do() {         try {             A a;             return true;         } catch (const std::exception&amp;) {             return false;         }     } };  class Log { public:     void Notify(const char* msg) {         message = msg;     }  private:     const char* message; };  class C { public:     C() {         B b;         if (!b.Do())             reinterpret_cast&lt;Log*>(1)->Notify(\"I don't know what happened!\");   \/\/ Simulating tracer lifetime error     } };  int main() {     C c;     return 0; }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043b\u043e\u0433\u0433\u0435\u0440\u0430. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0437\u0430\u0442\u0435\u043c \u043c\u044b \u0435\u0433\u043e \u043b\u043e\u0432\u0438\u043c \u0438 \u0432\u044b\u0434\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0443\u0436\u0435 \u043f\u0430\u0434\u0430\u0435\u043c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u0435\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u043e\u0435, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 !exccandidates \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0449\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/wp\/7a\/5v\/wp7a5vqebgn5rnxzk44rs4-mdpe.jpeg\" alt=\"image6\" data-src=\"https:\/\/habrastorage.org\/webt\/wp\/7a\/5v\/wp7a5vqebgn5rnxzk44rs4-mdpe.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043e\u0434\u043d\u043e \u043f\u043b\u044e\u0441\u043e\u0432\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 .cxr \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0435\u0433\u043e \u0441\u0442\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0433\u0434\u0435 \u0435\u0433\u043e \u043a\u0438\u043d\u0443\u043b\u0438, \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u043b\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fd\/b3\/ja\/fdb3jagge6mqe1d0vmciivsipvu.jpeg\" alt=\"image7\" data-src=\"https:\/\/habrastorage.org\/webt\/fd\/b3\/ja\/fdb3jagge6mqe1d0vmciivsipvu.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u042d\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u0438 \u0438\u0445 \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430\u0439\u0442\u0438. \u041d\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u044d\u0442\u043e \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.<\/p>\n<h2>\u041f\u043e\u0436\u0438\u0440\u0430\u0442\u0435\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 AppVerifier<\/h2>\n<p>  \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b. \u041d\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c \u0441\u0440\u0430\u0437\u0443, \u0440\u0435\u0447\u044c \u043d\u0435 \u043e\u0431 \u0443\u0442\u0435\u0447\u043a\u0430\u0445, \u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u0435\u0431\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438. \u0418 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u043e\u0433\u043e \u0436\u0435 \u0437\u0430 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c.<br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u043e\u043f\u044f\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e: \u043d\u0430 Windows \u0435\u0441\u0442\u044c AppVerifier. \u041e\u043d, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438 \u0441\u0430\u043c \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0445\u0438\u043f\u0430\u043c\u0438, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043c\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0443 \u043d\u0430\u0441 \u0434\u0432\u0443\u0445 \u0434\u0430\u043c\u043f\u043e\u0432 \u043d\u0435\u0442: \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043c\u043f \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e AppVerifier \u043d\u0430\u043c \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0445\u0438\u043f\u0430 \u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0441\u0432\u043e\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0442\u0435\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/uf\/3o\/vp\/uf3ovpe47wrv-p-pv56v9xybric.jpeg\" alt=\"image8\" data-src=\"https:\/\/habrastorage.org\/webt\/uf\/3o\/vp\/uf3ovpe47wrv-p-pv56v9xybric.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0438, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u043a\u0442\u043e \u0441 \u043a\u0430\u043a\u0438\u043c \u0441\u0442\u0435\u043a\u043e\u043c \u0431\u044b\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0432\u044b\u0434\u0435\u043b\u044f\u043b.<\/p>\n<pre><code class=\"cpp\">#include &lt;ctime> #include &lt;random>   constexpr const size_t Add = 0x8000;  template &lt;int LabelSize = 0> struct A {     char name[Add + LabelSize]; };  __declspec(noinline) static void CreateA() {     static constexpr const char label[] = \"A struct\";     A&lt;>* val = new A&lt;>();     memcpy_s(val->name, sizeof(val->name), label, sizeof(label)); }  __declspec(noinline) static void CreateB() {     static constexpr const char label[] = \"B struct - slightly bigger\";     A&lt;>* val = new A&lt;>();     memcpy_s(val->name, sizeof(val->name), label, sizeof(label)); }  __declspec(noinline) static void CreateC() {     static constexpr const char label[] = \"C struct - it size is greater than all previous structures\";     A&lt;>* val = new A&lt;>();     memcpy_s(val->name, sizeof(val->name), label, sizeof(label)); }  int main() {     std::mt19937_64 randomGenerator(std::time(nullptr));     uint64_t a_level = randomGenerator();     uint64_t b_level = randomGenerator();     if (a_level == b_level)         b_level = randomGenerator();     if (a_level > b_level)         std::swap(a_level, b_level);     for (;;) {         uint64_t rnd = randomGenerator();         if (rnd &lt; a_level)             CreateA();         else if (rnd &lt; b_level)             CreateB();         else             CreateC();     }     return 0; }<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u2014 0x8000 (\u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c), \u043d\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c (\u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0443\u0434\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c). \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u044b \u0438 \u0441\u0430\u043c\u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430\u0432\u044b\u0434\u0435\u043b\u044f\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u041d\u0430\u0447\u043d\u0435\u043c \u0436\u0435 \u043c\u044b \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0445\u0438\u043f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bg\/2j\/cf\/bg2jcfsnbn4ht4d6wammnvvvcdg.png\" alt=\"image9\" data-src=\"https:\/\/habrastorage.org\/webt\/bg\/2j\/cf\/bg2jcfsnbn4ht4d6wammnvvvcdg.png\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043e\u043d \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d. \u0418, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043d \u0437\u0430\u0431\u0438\u0442 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 0x8000. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 !av_heap_alloc_stats \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0432\u044b\u0434\u0435\u043b\u044f\u043b\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/5-\/c-\/wb\/5-c-wbsjoicktqyq-5wkg6al4uq.jpeg\" alt=\"image10\" data-src=\"https:\/\/habrastorage.org\/webt\/5-\/c-\/wb\/5-c-wbsjoicktqyq-5wkg6al4uq.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u0431\u043b\u043e\u043a\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 CreateC, \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u2014 CreateB, \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u2014 CreateA.<\/p>\n<p>  \u0412\u044b, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043c\u0435\u0445\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u043e \u0441\u0435\u0431\u044f: \u043c\u043e\u043b, \u0442\u043e\u0436\u0435 \u043c\u043d\u0435 \u0444\u043e\u043a\u0443\u0441 \u2014 \u043e\u0442\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043a\u0430\u043c\u0438-\u0442\u043e. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0435\u043a\u043e\u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0442?<\/p>\n<h2>\u041f\u043e\u0436\u0438\u0440\u0430\u0442\u0435\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 AppVerifier<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Verifier \u043b\u0438\u0431\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430 Linux, \u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u0441\u043a\u0443\u0448\u0430\u043b, \u0442\u0430\u043a \u043b\u0438\u0445\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0442\u0443\u0442 \u043d\u0435\u0442, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u0442\u044c \u043f\u043e \u0441\u0430\u043c\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0430\u0445:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/wx\/vy\/ou\/wxvyoun0mxlhk-kti-kxki4zxkw.jpeg\" alt=\"image11\" data-src=\"https:\/\/habrastorage.org\/webt\/wx\/vy\/ou\/wxvyoun0mxlhk-kti-kxki4zxkw.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u0433\u0440\u0443\u043f\u043f\u044b, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u0443\u0448\u0430\u0435\u0442. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">#include &lt;ctime> #include &lt;random> #include &lt;cstring> #include &lt;signal.h>  constexpr const size_t BufSize = 0x8000;  struct A {     char name[BufSize]; };  static void CreateA() {     static constexpr const char label[] = \"struct A\";     A* val = new A();     memcpy(val->name, label, sizeof(label)); }  static void CreateB() {     static constexpr const char label[] = \"struct B - slightly bigger\";     A* val = new A();     memcpy(val->name, label, sizeof(label)); }  static void CreateC() {     static constexpr const char label[] = \"struct C - it size is greater than all previous structures\";     A* val = new A();     memcpy(val->name, label, sizeof(label)); }  int main() {     std::mt19937_64 randomGenerator(std::time(nullptr));     uint64_t a_level = randomGenerator();     uint64_t b_level = randomGenerator();     if (a_level == b_level)         b_level = randomGenerator();     if (a_level > b_level)         std::swap(a_level, b_level);     for (unsigned int i = 0; i &lt; 50000; ++i)     {         uint64_t rnd = randomGenerator();         if (rnd &lt; a_level)             CreateA();         else if (rnd &lt; b_level)             CreateB();         else             CreateC();     }      raise(SIGTRAP);        return 0; }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0435: \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u043c Linux \u043d\u0435 \u0436\u0434\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u043a\u0430 \u044d\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b SIGTRAP \u043f\u043e\u0441\u043b\u0435 50000 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c, \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0441\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 heap_alloc_stats. \u041e\u043d\u0430 \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u043b\u043e\u043a\u0435: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c, \u043f\u043e\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 2 \u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e 4.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/uc\/ug\/p2\/ucugp2p_qtc7m-q-bxismy4ldmm.jpeg\" alt=\"image12\" data-src=\"https:\/\/habrastorage.org\/webt\/uc\/ug\/p2\/ucugp2p_qtc7m-q-bxismy4ldmm.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c struct A \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441 struct B \u0438 struct C \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0437\u044f\u0442\u044b\u0445. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043d\u043e \u043c\u043d\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435.<\/p>\n<h2>\u041a\u043e\u0440\u0443\u0442\u0438\u043d\u044b<\/h2>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043d\u0430 Linux. \u0422\u0435\u043c\u0430 \u044d\u0442\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u043e \u0442\u043e\u043c, \u0441 \u0447\u0435\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u0430\u043c \u043f\u0430\u0434\u0430\u0442\u044c.<br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u043e\u043f\u044f\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e: \u0432 20-\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0438 stackless. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u0442\u0435\u043a\u0435 \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/to\/pa\/qd\/topaqdo0y3vpbhp3hwhmwepumce.png\" alt=\"image13\" data-src=\"https:\/\/habrastorage.org\/webt\/to\/pa\/qd\/topaqdo0y3vpbhp3hwhmwepumce.png\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u044d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u0447\u0438\u043a \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u2014 \u0447\u0438\u0441\u043b\u0430 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;coroutine> #include &lt;exception> #include &lt;iostream> #include &lt;signal.h>  template&lt;typename T> struct Generator {     struct promise_type;     using handle_type = std::coroutine_handle&lt;promise_type>;      struct promise_type {         T value_;         std::exception_ptr exception_;          Generator get_return_object() {             return Generator(handle_type::from_promise(*this));         }         std::suspend_always initial_suspend() { return {}; }         std::suspend_always final_suspend() noexcept { return {}; }         void unhandled_exception() { exception_ = std::current_exception(); }         template&lt;std::convertible_to&lt;T> From>         std::suspend_always yield_value(From&amp;&amp; from) {             value_ = std::forward&lt;From>(from);             return {};         }         void return_void() {}     };      handle_type h_;      Generator(handle_type h) : h_(h) {}     ~Generator() { h_.destroy(); }     explicit operator bool() {         fill();         return !h_.done();     }     T operator()() {         fill();         full_ = false;         return std::move(h_.promise().value_);     }  private:     bool full_ = false;      void fill() {         if (!full_) {             h_();             if (h_.promise().exception_)                 std::rethrow_exception(h_.promise().exception_);             \/\/propagate coroutine exception in called context              full_ = true;         }     } };  Generator&lt;uint64_t> fibonacci_sequence() {     uint64_t a = 1, b = 1;     co_yield a;     co_yield b;     for (unsigned i = 0; i &lt; 8; ++i) {         if (i == 4)             raise(SIGTRAP);         uint64_t s = a + b;         co_yield s;         a = b;         b = s;     } }  int main() {     auto gen = fibonacci_sequence();      for (int j = 0; gen; j++)         std::cout &lt;&lt; gen() &lt;&lt; ' ';      return 0; }<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043b\u0430\u0441\u044c, \u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c, \u044f \u0432\u0435\u0440\u044e. \u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0430-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0438 \u0447\u0442\u043e\u0431\u044b \u0441\u044b\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0439 SIGTRAP. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0436\u0438\u0432\u0443\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/77\/hr\/ze\/77hrzedfmhe_t-_xqyctqev2g-w.png\" alt=\"image14\" data-src=\"https:\/\/habrastorage.org\/webt\/77\/hr\/ze\/77hrzedfmhe_t-_xqyctqev2g-w.png\"\/><\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u044f \u0438 \u0438\u043c\u0435\u043b \u0432 \u0432\u0438\u0434\u0443: \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u2014 \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a \u043a\u0430\u043a \u043d\u0430 \u043b\u0430\u0434\u043e\u043d\u0438.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0437\u0430\u043f\u0430\u0441\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u2014 \u0431\u0443\u0441\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u041e\u043d\u0438 stackful, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0438. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/7h\/nh\/dq\/7hnhdqfoods9u_iobghaowxvbl4.jpeg\" alt=\"image15\" data-src=\"https:\/\/habrastorage.org\/webt\/7h\/nh\/dq\/7hnhdqfoods9u_iobghaowxvbl4.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0427\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0442. \u043a. \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c.<br \/>  \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u0431\u0443\u0441\u0442\u0435 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u043e\u043a, \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u043f\u0435\u0440\u0432\u044b\u0445.<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;boost\/coroutine\/all.hpp> #include &lt;signal.h>  int main() {     boost::coroutines::asymmetric_coroutine&lt;int>::pull_type source(         [&amp;](boost::coroutines::asymmetric_coroutine&lt;int>::push_type&amp; sink) {             int first = 1, second = 1;             sink(first);             sink(second);             for (int i = 0; i &lt; 8; ++i) {                 if (i == 4)                     raise(SIGTRAP);                 int third = first + second;                 first = second;                 second = third;                 sink(third);             }         });      for (auto i : source)         std::cout &lt;&lt; i &lt;&lt; \" \";      return 0; }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434 \u0443\u0441\u043e\u0445 \u0440\u0430\u0437\u0430 \u0432 \u0442\u0440\u0438. \u0418 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0442\u043e\u0436\u0435 \u0441\u044b\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIGTRAP.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ur\/lp\/2k\/urlp2k-0vqejjkabrlgxxlasrlq.png\" alt=\"image16\" data-src=\"https:\/\/habrastorage.org\/webt\/ur\/lp\/2k\/urlp2k-0vqejjkabrlgxxlasrlq.png\"\/><\/p>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e. \u0412\u0438\u0434\u043d\u043e \u0441\u0442\u0435\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435.<br \/>  \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430. \u041d\u043e \u043a\u0430\u043a? \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 sink \u2014 \u043e\u043d \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0435. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sx\/bm\/il\/sxbmilliaqldawjohk0k_rjytlq.png\" alt=\"image17\" data-src=\"https:\/\/habrastorage.org\/webt\/sx\/bm\/il\/sxbmilliaqldawjohk0k_rjytlq.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0430\u0437\u0438\u0442\u044c \u043f\u043e sink, \u0442\u043e \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f \u043f\u043e\u043b\u044f caller \u0438 callee: \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u044d\u0442\u043e\u0439 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u0435\u043d. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e. \u0410 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0431\u0443\u0441\u0442 \u2014 \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u043e\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/0y\/ht\/d-\/0yhtd-nobbwb9bhw4fo1vcvtbkw.jpeg\" alt=\"image18\" data-src=\"https:\/\/habrastorage.org\/webt\/0y\/ht\/d-\/0yhtd-nobbwb9bhw4fo1vcvtbkw.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u042d\u0442\u043e asm \u0434\u043b\u044f GCC X86_64. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0442\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 RBP \u0438 RIP. \u041e\u043d\u0438-\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u044b. \u041d\u043e \u0433\u0434\u0435 \u0436\u0435 \u0432\u0437\u044f\u0442\u044c RSP?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/hs\/dn\/0d\/hsdn0d175jba7wqam76cjzvcxe0.jpeg\" alt=\"image19\" data-src=\"https:\/\/habrastorage.org\/webt\/hs\/dn\/0d\/hsdn0d175jba7wqam76cjzvcxe0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0438\u0436\u0435 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0436\u0435 \u0444\u0430\u0439\u043b\u0443, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 RSP \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u044d\u0442\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0442\u043e \u043b\u0438 \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0443\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 RIP:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bc\/tr\/pi\/bctrpizhvfxzwt0k8as7xqkjdpg.png\" alt=\"image20\" data-src=\"https:\/\/habrastorage.org\/webt\/bc\/tr\/pi\/bctrpizhvfxzwt0k8as7xqkjdpg.png\"\/><\/p>\n<p>  \u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u043a\u0430\u043a \u0440\u0430\u0437 jump \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b, \u0442\u0430\u043a \u0447\u0442\u043e RIP, \u043f\u043e\u0445\u043e\u0436\u0435, \u0432\u0435\u0440\u043d\u044b\u0439, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vo\/nu\/nd\/vonundqbyszy8elzhptwiyad03a.png\" alt=\"image21\" data-src=\"https:\/\/habrastorage.org\/webt\/vo\/nu\/nd\/vonundqbyszy8elzhptwiyad03a.png\"\/><\/p>\n<p>  \u041d\u0443 \u0432\u043e\u0442, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043c\u043e\u0436\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043d\u0435\u043c.<br \/>  \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0435\u0440\u0432\u044b\u0435 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0438 \u0432 \u0431\u0443\u0441\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u0434\u0435\u043f\u0440\u0435\u043a\u0435\u0439\u0447\u0435\u043d\u044b, \u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0435\u043c \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0438 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u0431\u0443\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;boost\/coroutine2\/all.hpp> #include &lt;signal.h>  int main() {     typedef boost::coroutines2::coroutine&lt;int>   coro_t;      coro_t::pull_type source(         [&amp;](coro_t::push_type&amp; sink) {             int first = 1, second = 1;             sink(first);             sink(second);             for (int i = 0; i &lt; 8; ++i) {                 if (i == 4)                     raise(SIGTRAP);                 int third = first + second;                 first = second;                 second = third;                 sink(third);             }         });      for (auto i : source)         std::cout &lt;&lt; i &lt;&lt; \" \";      return 0; }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0432\u0442\u043e\u0440\u044b\u0435. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043d\u0438\u0445 \u0432\u0436\u0438\u0432\u0443\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/au\/jk\/pa\/aujkpat6xgz0e-nq0gnswwtqf_y.png\" alt=\"image22\" data-src=\"https:\/\/habrastorage.org\/webt\/au\/jk\/pa\/aujkpat6xgz0e-nq0gnswwtqf_y.png\"\/><\/p>\n<p>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 boost::fiber. \u041d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 boost::context, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u043d\u0430\u0439\u0442\u0438. \u0418 \u043d\u0430\u043c \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 sink:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/8s\/gz\/nm\/8sgznmyv-nd5lv1pi22ncrujgn4.png\" alt=\"image23\" data-src=\"https:\/\/habrastorage.org\/webt\/8s\/gz\/nm\/8sgznmyv-nd5lv1pi22ncrujgn4.png\"\/><\/p>\n<p>  \u0422\u0438\u043f \u0443 sink \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0440\u0443\u0433\u043e\u0439, \u0438 \u043c\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0434\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u043e \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: \u043e\u043d \u0432 \u043f\u043e\u043b\u0435 fctx_. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e RIP \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 fiber::resume. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u0442\u0443\u0434\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1v\/n3\/dg\/1vn3dg1v2htfjin9li5lgyb2w_s.png\" alt=\"image24\" data-src=\"https:\/\/habrastorage.org\/webt\/1v\/n3\/dg\/1vn3dg1v2htfjin9li5lgyb2w_s.png\"\/><\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u0438\u0435\u043c\u0430\u043c\u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439. \u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u043b\u044e\u0431\u0438\u0442\u0435 \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 crash-\u0434\u0430\u043c\u043f\u0430\u0445 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043f\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0442\u043e <a href=\"https:\/\/kas.pr\/kozlov-coretech-debug-habr\">\u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0435 \u043a \u043d\u0430\u043c<\/a> \u2014 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u044d\u0442\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u043a \u0432\u043c\u0435\u0441\u0442\u0435!<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/kaspersky\/blog\/676298\/\"> https:\/\/habr.com\/ru\/company\/kaspersky\/blog\/676298\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443. \u0423 \u043d\u0430\u0441 \u0432 \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u0427\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 <a href=\"https:\/\/kas.pr\/github-habr-kozlov\">\u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432<\/a>, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 JS-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f WinDBG \u0438 Python-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f GDB. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u0436\u0438\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0438 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xn\/uw\/rj\/xnuwrjzm19784qqfg5tkczcod2y.png\" alt=\"cover\" data-src=\"https:\/\/habrastorage.org\/webt\/xn\/uw\/rj\/xnuwrjzm19784qqfg5tkczcod2y.png\"\/>  <\/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-335729","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335729","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=335729"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335729\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=335729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=335729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=335729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}