{"id":338323,"date":"2022-09-13T21:00:13","date_gmt":"2022-09-13T21:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=338323"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=338323","title":{"rendered":"<span>\u0424\u043e\u043a\u0443\u0441\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 ELF. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 4 \u041e\u0421 \u0432 400 \u0431\u0430\u0439\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430<\/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\">\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043b\u043e\u0432\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0421\/\u0421++\/Python \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0434\u043b\u044f x86. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b <a href=\"https:\/\/github.com\/jart\/cosmopolitan\">Cosmopolitan<\/a>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u043e\u0442\u0437\u044b\u0432\u0430 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 <a href=\"http:\/\/elks.sourceforge.net\/\">ELKS<\/a> \u044f \u0443\u0437\u043d\u0430\u043b\u0430, \u0447\u0442\u043e \u043c\u043e\u0439 \u043a\u043e\u0434 \u0442\u0430\u043c \u0432\u0441\u0435\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438 \u043e\u043d\u0438 \u0445\u043e\u0442\u044f\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0440\u044e\u043a\u0438 cosmo \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c \u0432\u0440\u043e\u0434\u0435 \u00abLinux-\u043f\u043e\u0440\u0442\u0430 i8086\u00bb. \u042f \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430, \u0447\u0442\u043e \u043c\u044b \u0441 \u0440\u0435\u0431\u044f\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ELKS \u00ab\u043e\u0434\u043d\u043e\u0439 \u043a\u0440\u043e\u0432\u0438\u00bb, \u0432\u0435\u0434\u044c \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 Cosmopolitan, \u2014 \u044d\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a i8086, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/ape.html\">Actually Portable Executable<\/a>. \u0410 \u0435\u0449\u0451 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438\u0441\u044c \u0432 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0435\u043d\u044f, \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u043c\u043e\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 Cosmopolitan. \u0418 \u0442\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b\u0430, \u0447\u0442\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/688078\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fz\/j8\/2s\/fzj82s9csxx81rj8iyj7ph38l3q.png\" alt=\"[Shinmyoumaru Sukuna]\" data-src=\"https:\/\/habrastorage.org\/webt\/fz\/j8\/2s\/fzj82s9csxx81rj8iyj7ph38l3q.png\"\/><\/a><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<hr\/>\n<p>  <\/p>\n<h2 id=\"pochemu-eto-tak-vazhno\">\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e?<\/h2>\n<p>  <\/p>\n<p>\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044f UNIX: \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u041d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 Cosmopolitan \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u043e\u0442\u043d\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/jart\/cosmopolitan $ cd cosmopolitan $ make -j16 MODE=tiny $ find o\/tiny -name \\*.com | wc -l 741 <\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043d\u0443\u043b\u044f \u043d\u0430 \u043c\u043e\u0451\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 15 \u0441\u0435\u043a\u0443\u043d\u0434. \u0418\u0437 741 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 403 \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435. \u0417\u0434\u043e\u0440\u043e\u0432\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0422\u0430\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0434\u043d\u0438\u043c \u043a\u0440\u0438\u0432\u044b\u043c \u0442\u0435\u0441\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u0440\u0443\u0434\u043d\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c \u043f\u043e\u0432\u0441\u044e\u0434\u0443. \u041f\u043e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 htop \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u00ab\u0434\u043e\u0442\u043a\u043e\u043c\u00bb \u2014 \u044d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Docker, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e zip-\u0444\u0430\u0439\u043b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 tzinfo). \u0410 \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0430, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0441\u0435\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445?<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f for f in $(find o\/tiny\/test -name \\*_test.com); do   for os in freebsd openbsd netbsd rhel7 rhel5 win7 win10 xnu; do     scp $f $os:     ssh $os .\/${f##*\/}   done done <\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c 400 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 8 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 (\u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e 3200 \u0442\u0435\u0441\u0442\u043e\u0432!) \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>scp<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0441\u0442 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0411\u043b\u0430\u0433\u043e\u0440\u0430\u0440\u044f <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/ecc8962555c342e0d4ac3edb10bd2f5602e65f4b\/tool\/build\/runit.c#L68\">runit<\/a> \u0438 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/ecc8962555c342e0d4ac3edb10bd2f5602e65f4b\/tool\/build\/runitd.c#L62\">runitd<\/a> \u0431\u043e\u043b\u044c\u0448\u0435 15 \u0441\u0435\u043a\u0443\u043d\u0434 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0439\u043c\u0451\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 (TDD) \u0441 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e.<\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6320b41b9fd9c5cec24a826d\" data-style=\"\" id=\"6320b41b9fd9c5cec24a826d\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<blockquote><p><a href=\"https:\/\/skillfactory.ru\/catalogue?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=sf_allcourses_130922&amp;utm_term=main\"><img decoding=\"async\" width=\"204\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/f6\/9k\/pb\/f69kpbgli09iefmogqonicvz8ew.png\" align=\"left\" title=\"\u0421\u043a\u0438\u0434\u043a\u0430 45% \u043f\u043e \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\u0443 HABR\" alt=\"\u0411\u0430\u043d\u043d\u0435\u0440\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/f6\/9k\/pb\/f69kpbgli09iefmogqonicvz8ew.png\"\/><\/a><br \/>  <strong>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043c\u044b \u043f\u043e\u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f:<\/strong>  <\/p>\n<ul>\n<li><u><a href=\"https:\/\/skillfactory.ru\/data-scientist-pro?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=data-science_dspr_130922&amp;utm_term=main\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e Data Science<\/a><\/u>. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439 \u0437\u0430 24 \u043c\u0435\u0441\u044f\u0446\u0430.<\/li>\n<li><u><a href=\"https:\/\/skillfactory.ru\/python-fullstack-web-developer?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=coding_fpw_130922&amp;utm_term=main\">\u00abFullstack-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 Python\u00bb<\/a><\/u>. \u0421\u0442\u0430\u043d\u044c\u0442\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u043c \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u043e\u043c \u0437\u0430 15 \u043c\u0435\u0441\u044f\u0446\u0435\u0432.<\/li>\n<li><u><a href=\"https:\/\/skillfactory.ru\/start-it-specialist-proforientaciya?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=sf_start_130922&amp;utm_term=main\">\u00ab\u0423\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0432 IT\u00bb<\/a><\/u>. \u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432: \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 9 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439 \u0438 \u043e\u0441\u0432\u043e\u0439\u0442\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0430\u043c.<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 <strong>\u043c\u0430\u043b\u043e\u043c \u0432\u0435\u0441\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/strong>. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0442\u043e-\u0442\u043e, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0433\u0440\u0435 \u0432 \u00ab\u043a\u043e\u0434-\u0433\u043e\u043b\u044c\u0444\u00bb. \u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c, \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043c\u0435\u0442\u044c \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0440\u0430\u0434\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435\u0440\u0441\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/ape.html\">\u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/a>, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Cosmopolitan Libc:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> 16K o\/tiny\/examples\/hello2.com             # \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 write  (links syscall)  20K o\/tiny\/examples\/hello.com              # \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 fputs  (links stdio)  24K o\/tiny\/examples\/hello3.com             # \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 printf (links fmt+stdio) 100K o\/tiny\/test\/libc\/calls\/access_test.com # \u043b\u0438\u043d\u043a\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0442\u0435\u0441\u0442\u043e\u0432 216K o\/tiny\/tool\/net\/redbean-original.com   # http\/1.1 server 1.8M o\/tiny\/examples\/pyapp\/pyapp.com        # \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Python <\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u044f \u0442\u0430\u043a \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u043e \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0435\u0441\u043b\u0438 \u0431\u044b \u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043b\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e 3 \u041c\u0431? \u0423 \u043c\u0435\u043d\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0433\u0430\u0431\u0438\u0442. \u0418 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043e\u0444\u0438\u0441 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0441 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u043f\u0442\u043e\u0432\u043e\u043b\u043e\u043a\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u044d\u0442\u0438\u0445 ~100-\u043a\u0438\u043b\u043e\u0431\u0438\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432. \u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u043d\u0430 \u0433\u043b\u0430\u0437:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\"># \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 cosmo \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043f\u0440\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 1\u0413\u0431\u0438\u0442\/\u0441 \u043f\u043e \u041b\u0412\u0421 \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f >>: (400*8 * 16*1000) \/ (1024*1024*1024\/8) 0.3814697265625  # \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 go \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043f\u0440\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 1\u0413\u0431\u0438\u0442\/\u0441 \u043f\u043e \u041b\u0412\u0421 \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f >>: (400*8 * 3*1000*1000) \/ (1024*1024*1024\/8) 71.52557373046875 <\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u043c\u043d\u043e\u0433\u043e. \u041d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0418 \u044d\u0442\u043e \u00ab\u043c\u0435\u043d\u044c\u0448\u0435\u00bb \u2014 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e \u0441\u0430\u043c\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0430 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u043d\u0435\u0433\u043e \u0434\u043e\u0436\u0438\u0442\u044c. Cosmopolitan \u2014 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u044b\u0432\u043a\u043e\u0432. \u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 1,5 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u044e\u044e\u0442 \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438, \u044f \u0434\u0443\u043c\u0430\u044e, \u043a\u0430\u043a \u0437\u0430\u043b\u0438\u0442\u044c \u043d\u0430 \u0445\u043e\u0441\u0442\u044b \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d. \u00ab\u041c\u0435\u043d\u044c\u0448\u0435\u00bb \u2014 \u044d\u0442\u043e \u0438 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0430\u043b\u043e\u0433\u043e. \u041a\u043e\u043c\u0443 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0439\u043c\u0443 \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432? \u041e\u043f\u043b\u0430\u0442\u0430 \u0443\u0441\u043b\u0443\u0433 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0432\u0430\u0448 \u0431\u044e\u0434\u0436\u0435\u0442. Altavista \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0432\u0435\u0441\u044c \u0441\u0432\u043e\u0439 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0410 \u0432\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c Full Story Elecron IDE \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 Kubernetes, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0434\u0430\u0442\u044c \u0432\u0441\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e C++. \u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0432\u044f\u0437\u0430\u0442\u044c?<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/tm\/ad\/9b\/tmad9bydx60phsofz3ilii3mbkg.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/tm\/ad\/9b\/tmad9bydx60phsofz3ilii3mbkg.jpeg\" alt=\"[ABC - Always Be Coding]\" data-src=\"https:\/\/habrastorage.org\/webt\/tm\/ad\/9b\/tmad9bydx60phsofz3ilii3mbkg.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u0443\u0434\u0430\u0447\u043d\u0438\u043a\u0438 [\u044d\u0442\u043e \u0441\u043b\u043e\u0432\u0430 \u0430\u0432\u0442\u043e\u0440\u0430] \u0432\u0441\u0435\u0433\u0434\u0430 \u0436\u0430\u043b\u0443\u044e\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0434\u0443\u0442\u043e\u0441\u0442\u044c, \u0430 \u043f\u0440\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441. \u041d\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c. \u0418\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0436\u0435\u0440\u0442\u0432\u0430\u043c\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0418\u043c \u0443\u0436\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e. \u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0434\u0443\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430, \u043f\u043e\u043a\u0430 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0414\u044d\u043d\u043d\u0438\u0441 \u0438\u0437 \u00ab\u041f\u0430\u0440\u043a\u0430 \u042e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u00bb. \u0420\u0430\u0437\u0434\u0443\u0442\u043e\u0441\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u043b\u044c\u0448\u0438\u0432\u044b\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0435\u0441\u0442. \u041e\u043d\u0430 \u0431\u0443\u0434\u043e\u0440\u0430\u0436\u0438\u0442 \u0443\u043c\u044b \u0438\u0437\u0433\u043e\u043b\u043e\u0434\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u043e \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0437\u0430\u0434\u0430\u0447\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c \u043d\u0430 \u044d\u043a\u0441\u0430\u0431\u0430\u0439\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043a\u0430\u0436\u0443 \u0447\u0435\u0441\u0442\u043d\u043e, \u044d\u0442\u043e \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u043e\u0441\u044c \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0430\u043c\u044b\u043c\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0432 \u043c\u0438\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0437\u0430\u043d\u044f\u043b\u0430\u0441\u044c \u0442\u0435\u043f\u0435\u0440\u044c. \u0422\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u044d\u0442\u0430\u043f, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044e\u0449\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0443\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u0430\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0431\u0430\u0437, \u044f \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432 \u044d\u0442\u0438\u0445 \u0431\u0430\u0437\u0430\u0445 \u0443\u0436\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043b\u0435\u0442 \u043d\u0435 \u0431\u044b\u043b\u043e \u0436\u0435\u043d\u0449\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0431\u044b \u0432\u0441\u0451 \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0443\u0434\u0430 \u043d\u043e\u0433\u0430 \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0443\u043f\u0430\u043b\u0430. \u041f\u043e\u0440\u0430 \u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0410 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u0435\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0442\u043e\u0447\u043d\u043e \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u00bb (size coding)!<\/p>\n<p>  <\/p>\n<h2 id=\"zaglyanem-v-binarnik\">\u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a<\/h2>\n<p>  <\/p>\n<p>\u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e, \u2014 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u0445 (hex editors). \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">0002d0b0  01 00 01 03 01 06 01 09  01 0c 01 0f 01 12 14 1e  |................| 0002d0c0  01 15 04 1e 01 18 17 1e  01 1e 1c 1e 01 1b 00 00  |................| 0002d0d0  21 01 01 00 02 01 01 00  01 01 09 00 01 01 0a 00  |!...............| 0002d0e0  01 01 01 00 01 01 01 00  03 01 1a 00 04 01 01 00  |................| 0002d0f0  01 01 1a 00 03 01 01 00  81 01 00 00 00 00 00 00  |................| 0002d100  21 01 01 00 02 01 01 00  01 01 16 00 01 01 01 00  |!...............| 0002d110  01 01 1c 00 04 01 01 00  01 01 1a 00 03 01 01 00  |................| 0002d120  81 01 00 00 00 00 00 00  21 01 01 00 02 01 01 00  |........!.......| 0002d130  01 01 09 00 01 01 0c 00  01 01 01 00 03 01 1a 00  |................| <\/code><\/pre>\n<p>  <\/p>\n<p>\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0445\u043e\u0440\u043e\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0449\u0435\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435, \u043d\u043e \u043e \u0444\u043e\u0440\u043c\u0435 \u0438 \u0432\u0438\u0434\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0443\u0437\u043d\u0430\u0451\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u043a\u0430\u043a \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0446\u0435\u043b\u044c\u043d\u043e\u0435. \u0412\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e \u0432\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0436\u0435 \u0437\u0440\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044c\u043d\u044b\u043c. <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/blinkenlights\/\">Blinkenlights<\/a> \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b IBM CP437. \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0430 \u0432\u044b\u0448\u0435, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/36\/yf\/v5\/36yfv5zpjy0kav8pjzdqlm-acsg.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/36\/yf\/v5\/36yfv5zpjy0kav8pjzdqlm-acsg.png\" alt=\"[RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 blinkenlights]\" data-src=\"https:\/\/habrastorage.org\/webt\/36\/yf\/v5\/36yfv5zpjy0kav8pjzdqlm-acsg.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0423\u0447\u0442\u0438\u0442\u0435 \u0438 \u0442\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 <em>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e<\/em>. \u0414\u0430, \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0441 CP437, \u0443\u0432\u0438\u0434\u0438\u0442 \u0430\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0443. \u041d\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043f\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u043f\u043b\u043e\u0448\u043d\u0430\u044f \u0441\u0442\u0435\u043d\u0430 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0440\u0430\u0437\u0440\u044f\u0434\u043e\u0432, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. CP437 \u2014 \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, 256-\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442. \u041f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439, \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c \u0432\u0441\u0451 \u0438 \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043c\u0430\u0433\u0438\u044f! \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/s8\/15\/mg\/s815mgrn5zyqd2oabufkcchgy-i.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/s8\/15\/mg\/s815mgrn5zyqd2oabufkcchgy-i.png\" alt=\"[jumptab.png]\" data-src=\"https:\/\/habrastorage.org\/webt\/s8\/15\/mg\/s815mgrn5zyqd2oabufkcchgy-i.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0448 <code>struct<\/code> \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>__attribute__((__packed__))<\/code>:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/3t\/c2\/2s\/3tc22s_p2k5ysqx6asn4am0okeq.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3t\/c2\/2s\/3tc22s_p2k5ysqx6asn4am0okeq.png\" alt=\"[packed.png]\" data-src=\"https:\/\/habrastorage.org\/webt\/3t\/c2\/2s\/3tc22s_p2k5ysqx6asn4am0okeq.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b x86-64:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/worker.jart.workers.dev\/sizetricks\/x86-64-code.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/34b\/04d\/1f7\/34b04d1f7264cc1f868704de04a18698.png\" alt=\"[x86-64-code.png]\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/34b\/04d\/1f7\/34b04d1f7264cc1f868704de04a18698.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u2014 <code>\/dev\/urandom<\/code>:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/pz\/jz\/tq\/pzjztqhgoh1h_egam-xbjnnw-nk.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pz\/jz\/tq\/pzjztqhgoh1h_egam-xbjnnw-nk.png\" alt=\"[urandom.png]\" data-src=\"https:\/\/habrastorage.org\/webt\/pz\/jz\/tq\/pzjztqhgoh1h_egam-xbjnnw-nk.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0410 \u044d\u0442\u043e \u2014 \u0432\u0438\u0434 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0432 UBSAN (Undefined Behavior Sanitizer). \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043b\u0443\u0447\u0448\u0435, \u0438 \u044d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 UBSAN \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c\u0438. \u0414\u0435\u043b\u043e \u0432 \u043f\u043b\u043e\u0445\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 (struct).<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/co\/ex\/pv\/coexpv5bhdvue6zwqrfhpjthh5w.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/co\/ex\/pv\/coexpv5bhdvue6zwqrfhpjthh5w.png\" alt=\"[ubsan-bing.png]\" data-src=\"https:\/\/habrastorage.org\/webt\/co\/ex\/pv\/coexpv5bhdvue6zwqrfhpjthh5w.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>Cosmopolitan \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0438\u0437 \u043d\u0438\u0447\u0435\u0433\u043e. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442, \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 APE, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u043b\u0438\u0431\u043e \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439, \u043b\u0438\u0431\u043e \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0434\u0432\u0430 \u0441\u0432\u043e\u0438\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f Cosmopolitan Libc \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">-rwxr-xr-x 1 501 jart 52K Jun  9 09:08 bing.com (see bing.c) -rwxr-xr-x 1 501 jart 32K Jun  9 09:08 fold.com (see fold.c) <\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438\u0445 \u0441 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>~\/bin\/bf<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/sh bing.com &lt;\"$1\" |   fold.com |   exec less <\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u0444\u0430\u0439\u043b\u0430, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u044e \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">bf o\/\/examples\/hello.com <\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>~\/bin\/bloat<\/code>. \u041e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0444\u0430\u0439\u043b\u0430 .com.dbg.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/sh nm -C --size \"$@\" |   sort -r |   grep ' [bBtTRr] ' |   exec less <\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"organizaciya-poley-struktur\">\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u2014 \u0431\u0435\u0441\u0441\u043f\u043e\u0440\u043d\u043e, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u0430\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0444\u0430\u0439\u043b\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 Python 3.6 \u0447\u0435\u0440\u0435\u0437 bing | fold \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0430 \u043e\u0434\u043d\u0443 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0443\u044e \u0432\u0435\u0449\u044c. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 Python \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">typedef struct {     int s_narcs;     arc*s_arc;     int s_lower;     int s_upper;     int*s_accel;     int s_accept; } state; <\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u043b\u0430 \u043a\u043e\u0434, \u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0430 \u0431\u044b \u044d\u0442\u043e\u0433\u043e. \u0423 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0448\u0435 \u043d\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">typedef struct {     int s_narcs;     int __pad1;   \/\/ \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u044b \u0432\u043f\u0443\u0441\u0442\u0443\u044e     arc*s_arc;     int s_lower;     int s_upper;     int*s_accel;     int s_accept;     int __pad2;   \/\/ \u0438 \u0435\u0449\u0451 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 } state; <\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0430 \u043f\u043e\u043b\u0435 <code>s_accept<\/code> \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0441\u0440\u0435\u0437\u0430\u043b\u0430 \u043f\u043e 4 \u041a\u0431 \u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 Python:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">typedef struct {     int s_narcs;     int s_accept;     arc*s_arc;     int s_lower;     int s_upper;     int*s_accel; } state; <\/code><\/pre>\n<p>  <\/p>\n<p>\u0416\u0438\u0437\u043d\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u0414\u0443\u043c\u0430\u044e, \u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0438\u0440\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u0441\u0442\u0438\u043b\u044e, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043a\u043e\u0434\u0443. \u0422\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0438\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438. \u0412\u0435\u0434\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u043b\u044e\u0434\u0438 \u043b\u043e\u043c\u0430\u044e\u0442 \u0433\u043e\u043b\u043e\u0432\u044b, \u0432\u044b\u0438\u0441\u043a\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u0432\u0430\u0448\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u0438\u043c \u043d\u0443\u0436\u043d\u0430 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u0438 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<h2 id=\"rle-kodirovanie\">RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043e \u043c\u043e\u0449\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u0441\u0436\u0430\u0442\u0438\u044f, \u043a\u0430\u043a \u0441 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c, \u0442\u0430\u043a \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b-\u0441\u0430\u043c\u043e\u0443\u0447\u043a\u0438, \u0434\u0443\u043c\u0430\u044e, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u2014 RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">1,1,1,1,1,1,1,1,2,2,2,3 <\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432\u044b \u0437\u0430\u0434\u0430\u0451\u0442\u0435 \u0435\u0451 \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 {count, thing} \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f {0,0}.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">8,1, 3,2, 1,3, 0,0 <\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u043b\u044e\u0431\u043b\u044e RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (1) \u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 (2) \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u0432\u0435\u0441\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 14 \u0431\u0430\u0439\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/14-\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a \/ \/@paramdi \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \/@paramsi \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 uint8_t {len\u2081,byte\u2081}, ..., {0,0} \/@archx86-64,i386,i8086 \/@seelibc\/nexgen32e\/rldecode.S rldecode: 31 c9xor%ecx,%ecx ac0:lodsb 86 c1xchg%al,%cl aclodsb e3 05jrcxz2f aa1:stosb e2 fdloop1b eb f5jmp0b c32:ret .typerldecode,@function .sizerldecode,.-rldecode .globlrldecode <\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u0435\u043d \u0441\u0432\u043e\u0435\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0441 i8086, i386 \u0438 x86-64. \u041d\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0421:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">struct RlDecode {   uint8_t repititions;   uint8_t byte; };  void rldecode2(uint8_t *p, const struct RlDecode *r) {   for (; r->repititions; ++r) {     memset(p, r->byte, r->repititions);     p += r->repititions;   } } <\/code><\/pre>\n<p>  <\/p>\n<p>RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 RLE \u0443\u0434\u0432\u043e\u0438\u0442! \u041d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u043c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e, \u0438 RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 redbean \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 URI \u0438 HTTP-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u0448\u0443\u0442 \u043d\u0430 C \u0438\u043b\u0438 C++, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 256 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 C \u0432\u0440\u043e\u0434\u0435 <code>rdi[al &amp; 255]<\/code> \u0432 \u0442\u0430\u043a\u0438\u0435 \u0431\u043b\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">movzbl%al,%eax mov(%rdi,%rax),%al <\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0434\u043b\u044f \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043d\u0430\u0437\u0432\u0430\u043b\u0438 \u0431\u044b \u044d\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0438\u043b\u0438 LUT. \u042d\u0442\u043e \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0414\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b x86 \u0434\u0430\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/www.felixcloutier.com\/x86\/xlat:xlatb\">XLAT<\/a>, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u0430\u044f \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412\u0430\u0436\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c LUT \u0432 HTTP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u043e\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f HTTP, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/justine.lol\/sizetricks\/#elfrfc2616.txt\">RFC2616<\/a>, \u0434\u043e\u043b\u0436\u043d\u044b \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 (\u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">CHAR           = &lt;any US-ASCII character (octets 0 - 127)> SP             = &lt;US-ASCII SP, space (32)> HT             = &lt;US-ASCII HT, horizontal-tab (9)> CTL            = &lt;any US-ASCII control character                  (octets 0 - 31) and DEL (127)> token          = 1*&lt;any CHAR except CTLs or separators> separators     = \"(\" | \")\" | \"&lt;\" | \">\" | \"@\"                | \",\" | \";\" | \":\" | \"\\\" | &lt;\">                | \"\/\" | \"[\" | \"]\" | \"?\" | \"=\"                | \"{\" | \"}\" | SP | HT <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 C \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d LUT \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">const char kHttpToken[256] = {    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0x00    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0x10    0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, \/\/ 0x20  ! #$%&amp;\u2018  *+ -.    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \/\/ 0x30 0123456789          0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \/\/ 0x40  ABCDEFGHIJKLMNO    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, \/\/ 0x50 PQRSTUVWXYZ   ^_    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \/\/ 0x60 `abcdefghijklmno    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, \/\/ 0x70 pqrstuvwxyz | ~    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0x80    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0x90    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xa0    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xb0    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xc0    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xd0    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xe0    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \/\/ 0xf0 }; <\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0442\u043e\u043a\u0435\u043d\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0432\u0435\u0441\u0442\u0438 <code>kHttpToken[c &amp; 255]<\/code>. \u041d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 200 \u0431\u0430\u0439\u0442 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 RLE-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.globlkHttpToken .section .bss.sort.100.kHttpToken,\"aw\",@nobits \/@seenet\/http\/khttptoken.S kHttpToken: .zero256 .section .rodata.sort.100.kHttpToken,\"a\",@progbits .byte 33,0                   # 00-20 \u2205-\u2420 .byte  1,1                   # 21-21 !-! .byte  1,0                   # 22-22 \u201c-\u201c .byte  5,1                   # 23-27 #-\u2018 .byte  2,0                   # 28-29 (-) .byte  2,1                   # 2a-2b *-+ .byte  1,0                   # 2c-2c ,-, .byte  2,1                   # 2d-2e --. .byte  1,0                   # 2f-2f \/-\/ .byte 10,1                   # 30-39 0-9 .byte  7,0                   # 3a-40 :-@ .byte 26,1                   # 41-5a A-Z .byte  3,0                   # 5b-5d [-] .byte 29,1                   # 5e-7a ^-z .byte  1,0                   # 7b-7b {-{ .byte  1,1                   # 7c-7c |-| .byte  1,0                   # 7d-7d }-} .byte  1,1                   # 7e-7e ~-~ .byte129,0                   # 7f-ff \u2302-\u03bb .byte0,0                     # terminator .section .init.sort.100.kHttpToken,\"a\",@progbits callrldecode <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 Cosmopolitan \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">o\/\/tool\/build\/xlat.com -TiC ' ()&lt;>@,;:\\\"\/[]?={}' -iskHttpToken <\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"decentralizovannye-razdely\">\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 xlat.com \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b x86. \u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u0438\u0437 70-\u0445 \u0438 80-\u0445, \u0432\u043e\u0441\u043a\u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u043c\u043d\u043e\u0439 \u0434\u043b\u044f Cosmopolitan. \u041d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0451 \u00ab\u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b\u00bb (decentralized sections).<\/p>\n<p>  <\/p>\n<p>\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <code>_init()<\/code>, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f UNIX. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0431\u0430\u0437 \u0435\u0451 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>_init()<\/code> \u2014 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0443\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439 (\u043b\u0438\u043d\u043a\u0435\u0440\u0430).<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a. \u0412\u0430\u0448\u0430 libc \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u043a\u043e\u0434\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>_init()<\/code>. Cosmopolitan Libc (\u0441\u043b\u0435\u0433\u043a\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u0445 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.section .init_prologue,\"ax\",@progbits .globl_init \/@paramr12 is argc (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d) \/@paramr13 is argv (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d) \/@paramr14 is envp (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d) \/@paramr15 is envp (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d) \/@noterdi is __init_bss_start (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442) \/@notersi is __init_rodata_start (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442) \/@seelibc\/runtime\/init.S _init:push%rbp mov%rsp,%rbp lea__init_bss_start(%rip),%rdi lea__init_rodata_start(%rip),%rsi .previous\/* ... \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ... *\/.section .init_epilogue,\"ax\",@progbits _woot:leave ret .previous <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0430\u0448\u0430 libc \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439, \u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435 \u2014 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0432 .S, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.section .init_rodata_prologue,\"a\",@progbits .globl__init_rodata_start,__init_rodata_end .align__SIZEOF_POINTER__ __init_rodata_start: .previous\/* ... \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ... *\/.section .init_rodata_epilogue,\"a\",@progbits __init_rodata_end: .byte0x90 .previous  .section .init_bss_prologue,\"aw\",@nobits .globl__init_bss_start,__init_bss_end .align__SIZEOF_POINTER__ __init_bss_start: .previous\/* ... \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 ... *\/.section .init_bss_epilogue,\"aw\",@nobits __init_bss_end: .byte0 .previous <\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 ape\/ape.lds *\/ SECTIONS {   .text . : {     KEEP(*(.init_prologue))     KEEP(*(SORT_BY_NAME(.init.sort.*)))     KEEP(*(.init))     KEEP(*(.init_epilogue))     *(.text .text.*)     KEEP(*(SORT_BY_NAME(.rodata.sort.*)))     *(.rodata .rodata.*)   }   .bss . : {     KEEP(*(SORT_BY_NAME(.bss.sort.*)))     *(SORT_BY_ALIGNMENT(.bss))     *(SORT_BY_ALIGNMENT(.bss.*))     *(COMMON)   } } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0430\u0439\u043b\u044b \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>_init()<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <code>__init_rodata_start<\/code> \u0438 <code>__init_bss_start<\/code>. \u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (BSS) \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e: \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 System V Application Binary Interface, \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 _init() \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0442\u0438\u0440\u0430\u0442\u044c RDI \u0438 RSI. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0436\u0451\u0441\u0442\u043a\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>rodata<\/code> \u0438 <code>bss<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 kHttpToken. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 AMD K8 \u0438 Barcelona, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSSE3 (\u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 SSE). \u0417\u0434\u0435\u0441\u044c \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 CPUID \u043f\u043e\u0441\u043b\u0435 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0449\u0438\u0442\u044b <code>pthread_once()<\/code>. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f CPUID \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 50 \u043d\u0441, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041d\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>_init()<\/code>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u043d, \u0432\u0435\u0434\u044c <code>_init()<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0432\u0441\u0435\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.section .bss.sort.100.kCpuid1,\"aw\",@nobits \/uint32_t kCpuid1[4]; \/@seelibc\/nexgen32e\/kcpuids.S kCpuid1:.long0,0,0,0 .globlkCpuid1 .typekCpuid1,@object .sizekCpuid1,.-kCpuid1  .section .init.sort.100.kCpuid1,\"a\",@progbits 53push%rbx 6a 01push$1 58pop%rax 0f a2cpuid abstosl 93xchg%eax,%ebx abstosl 91xchg%eax,%ecx abstosl 92xchg%eax,%edx abstosl 5bpop%rbx <\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0415\u0441\u043b\u0438 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433 Intel \u0441\u0431\u0438\u0432\u0430\u043b \u0432\u0430\u0441 \u0441 \u0442\u043e\u043b\u043a\u0443 \u0438 \u0432\u044b \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440, \u0443 \u043a\u0430\u043a\u0438\u0445 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u0441\u0451 \u044d\u0442\u043e \u043a\u0440\u0430\u0442\u043a\u043e \u043f\u043e\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/dox\/microarch.txt\">microarch.txt<\/a>.<\/p><\/blockquote>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0441\u0435\u0433\u043e 14 \u0431\u0430\u0439\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041e\u043d\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u044b \u043d\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432 \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443, \u043e\u043d\u0438 \u0443\u0436\u0438\u0432\u0443\u0442\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u043d\u0430 \u043f\u044f\u0442\u043a\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e \u0437\u043e\u043b\u043e\u0442\u0430\u044f \u0436\u0438\u043b\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u0438\u043d\u0441\u043a\u0438\u0445 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0431\u0430\u0437, \u0433\u043e\u0440\u044f\u0447\u043e \u043b\u044e\u0431\u0438\u043c\u044b\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043e\u0436\u0430\u044e\u0442 \u0438\u043d\u0434\u0438-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u042d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043a -lpthread. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c SSSE3, \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0443\u0437\u043d\u0430\u0442\u044c \u0434\u0435\u0432\u044f\u0442\u044b\u0435 \u0431\u0438\u0442\u044b ECX, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (kCpuid1[2][1&lt;&lt;9]) {   \/\/ \u0435\u0441\u0442\u044c ssse3! } else {   \/\/ \u044d\u0442\u043e k8 \u0438\u043b\u0438 barcelona } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u0434\u0440\u0443\u0433\u043e\u0439 libc, \u0430 \u043d\u0435 \u0442\u043e\u0439, \u0447\u0442\u043e \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432 cosmo (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, musl, glibc), \u0432\u0430\u043c \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434, \u043d\u043e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.bss kCpuid1:.long0,0,0,0 .globlkCpuid1 .typekCpuid1,@object .sizekCpuid1,.-kCpuid1  .section .init,\"a\",@progbits 53push%rbx 48 8d 3d 00 00 00 00leakCpuid1(%rip),%rdi 6a 01push$1 58pop%rax 0f a2cpuid abstosl 93xchg%eax,%ebx abstosl 91xchg%eax,%ecx abstosl 92xchg%eax,%edx abstosl 5bpop%rbx <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u00ab\u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c\u00bb \u0435\u0449\u0451 \u043f\u043e 7 \u0431\u0430\u0439\u0442 (\u0432\u0441\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d 21 \u0431\u0430\u0439\u0442), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 Cosmo \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0436\u0451\u0441\u0442\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 <code>_init()<\/code> \/ rodata \/ bss \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043d\u0430 C \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u043d\u0430 C\/C++, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u044a\u0435\u0441\u0442 42 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">uint32_t kCpuid1[4];  __attribute__((__constructor__)) static void kCpuid1Init() {   uint32_t ax, bx, cx, dx;   asm(\"cpuid\" : \"=a\"(ax), \"=b\"(bx), \"=c\"(cx), \"=d\"(dx) : \"0\"(1));   kCpuid1[0] = ax;   kCpuid1[1] = bx;   kCpuid1[2] = cx;   kCpuid1[3] = dx; } <\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0415\u0441\u043b\u0438 \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u00abRichard Stallman Math 55\u00bb \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <code>asm()<\/code> \u0432\u0430\u0441 \u043e\u0437\u0430\u0434\u0430\u0447\u0438\u043b\u0430, \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/dox\/rmsiface.txt\">rmsiface.txt<\/a>.<\/p><\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u044f \u043f\u043e\u043d\u044f\u043b\u0430 \u043d\u0435\u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Cosmopolitan, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0439 \u0441\u043d\u043e\u0440\u043e\u0432\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043b\u0451\u0433\u043a\u0438\u0439 \u043a\u043e\u0434, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u0445. GCC \u0438 Clang (\u043a\u043e\u0434 \u043d\u0438\u0436\u0435) \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u0437\u0430 30 \u0431\u0430\u0439\u0442. \u0421\u0442\u043e\u0438\u0442 \u043b\u0438 \u0434\u0435\u043b\u043e \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u2014 \u0440\u0435\u0448\u0430\u0442\u044c \u0432\u0430\u043c.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">uint32_t kCpuid1[4];  __attribute__((__constructor__)) static void kCpuid1Init() {   uint32_t ax, *di;   asm volatile(\"cpuid\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%ebx,%%eax\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%ecx,%%eax\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%edx,%%eax\\r\\n\"                \"stosl\"                : \"=a\"(ax), \"=D\"(di)                : \"0\"(1), \"1\"(kCpuid1)                : \"rbx\", \"rcx\", \"rdx\", \"memory\"); } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434 \u043d\u0430 C \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0443\u043a\u043b\u044e\u0436\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c 8-\u0431\u0430\u0439\u0442\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 <code>.ctors<\/code>. \u0418\u0445 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0432\u044f\u0437\u0435\u0439 (\u043b\u0438\u043d\u043a\u0435\u0440\u0435). \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 C \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 .ctors \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 <code>_init()<\/code>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0434\u0443\u0445\u0435 \u00ab\u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u00bb \u043d\u0435\u0442. Clang \u0442\u0443\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442: \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u0432\u043b\u0430\u0441\u0442\u0438 \u043d\u0430\u0434 \u0432\u0441\u0435\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438. \u041a\u0430\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 GCC \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">register long di asm(\"rdi\"); register long si asm(\"rsi\");  __attribute__((__section__(\".bss.sort.100.kCpuid1,\\\"aw\\\",@nobits #\"))) uint32_t kCpuid1[4];  __attribute__((__used__,                __section__(\".init.sort.100.kCpuid1,\\\"a\\\",@progbits #\"))) static void kCpuid1Init(void) {   uint32_t ax;   asm volatile(\"push\\t%%rbx\\r\\n\"                \"cpuid\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%ebx,%%eax\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%ecx,%%eax\\r\\n\"                \"stosl\\r\\n\"                \"xchg\\t%%edx,%%eax\\r\\n\"                \"stosl\\r\\n\"                \"push\\t%%rbx\"                : \"=a\"(ax), \"+D\"(di)                : \"0\"(1)                : \"rcx\", \"rdx\", \"memory\");   __builtin_unreachable();  \/\/ \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 RET } <\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u2014 \u0445\u0440\u0443\u043f\u043a\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u043b\u0430\u0433\u0438 <code>-ffixed-rdi -ffixed-rsi -fomit-frame-pointer -O -fno-sanitize=all<\/code>. \u0410 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 C \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u0432\u0440\u043e\u0434\u0435 ASAN), \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u0441 \u043a\u043e\u0434\u043e\u043c \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e, \u0433\u0434\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"udalenie-myortvogo-koda\">\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/h2>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Libc \u043e\u0442 Cosmopolitan, \u0432\u0441\u0435 \u0444\u043e\u043a\u0443\u0441\u044b \u0432\u044b\u0448\u0435 \u0441 CPUID \u0443\u0436\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u044b \u0437\u0430 \u0432\u0430\u0441, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 libc\/nexgen32e\/x86feature.h if (X86_HAVE(SSSE3)) {   \/\/ \u0443 \u043d\u0430\u0441 ssse3! } else {   \/\/ \u044d\u0442\u043e k8 \u0438\u043b\u0438 barcelona } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/libc\/nexgen32e\/x86feature.h\">x86feature.h<\/a> \u0441\u0442\u043e\u0438\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0438\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 C. \u0415\u0451 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e \u0432\u0441\u0435\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435. \u0410 \u0435\u0449\u0451 \u043e\u043d\u0430 \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 Cosmopolitan \u2014 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 Actually Portable Executable, \u0433\u0434\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0441\u0435\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 define \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, #ifdef \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">#if X86_REQUIRE(SSSE3)   \/\/ \u0435\u0441\u0442\u044c ssse3! #else   \/\/ \u044d\u0442\u043e k8 \u0438\u043b\u0438 barcelona #endif <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 SSSE3, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0444\u043b\u0430\u0433 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>-mssse3<\/code>. \u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <code>X86_HAVE()<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 <code>X86_REQUIRE(SSSE3)<\/code>, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b GCC \u0438\u043b\u0438 Clang, \u043e\u0431\u0435 \u0432\u0435\u0442\u0432\u0438 \u0432\u043e\u0439\u0434\u0443\u0442 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (X86_HAVE(SSSE3)) {   \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u043a\u0438\u0445 \u0445\u0430\u043a\u043e\u0432 ssse3 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 } else {   \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 ansi c } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0448\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <code>-mssse3<\/code>, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u044e \u044d\u0442\u0443 \u0440\u0430\u0437\u0434\u0443\u0442\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0442\u0430\u0440\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0426\u041f\u0423, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (X86_HAVE(SSSE3)) {   \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u043a\u0438\u0445 \u0445\u0430\u043a\u043e\u0432 ssse3 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 } else {   \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 ansi c } <\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e <code>MODE=opt<\/code> \u0434\u0435\u043b\u0430\u0435\u0442 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 Makefile \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>-march=native<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0426\u041f\u0423 \u0432\u0430\u0448\u0435\u0433\u043e \u0445\u043e\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e Cosmopolitan \u0438 GCC \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u0426\u0435\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u044e\u043a\u0430 \u2014 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b, \u0432\u0435\u0434\u044c \u0442\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 x86.<\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0449\u0435 \u0438 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/ape\/loader.c\">ape\/loader.c<\/a> \u0438 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/libc\/dce.c\">libc\/dce.c<\/a>.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">#define LINUX   1 #define METAL   2 #define WINDOWS 4 #define XNU     8 #define OPENBSD 16 #define FREEBSD 32 #define NETBSD  64  #define SupportsLinux()   (SUPPORT_VECTOR &amp; LINUX) #define SupportsXnu()     (SUPPORT_VECTOR &amp; XNU) #define SupportsFreebsd() (SUPPORT_VECTOR &amp; FREEBSD) #define SupportsOpenbsd() (SUPPORT_VECTOR &amp; OPENBSD) #define SupportsNetbsd()  (SUPPORT_VECTOR &amp; NETBSD)  #define IsLinux()   (SupportsLinux() &amp;&amp; os == LINUX) #define IsXnu()     (SupportsXnu() &amp;&amp; os == XNU) #define IsFreebsd() (SupportsFreebsd() &amp;&amp; os == FREEBSD) #define IsOpenbsd() (SupportsOpenbsd() &amp;&amp; os == OPENBSD) #define IsNetbsd()  (SupportsNetbsd() &amp;&amp; os == NETBSD) <\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 APE \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">make MODE=tiny CPPFLAGS+=-DSUPPORT_VECTOR=0b00000001 <\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u00abhello world\u00bb \u043d\u0430 4 \u041a\u0431, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Linux \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 12 \u041a\u0431 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Windows, MacOS, FreeBSD, NetBSD, OpenBSD \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437 BIOS \u00ab\u043d\u0430 \u0433\u043e\u043b\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435\u00bb, \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c ELF. \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0442\u044b \u0434\u043b\u044f Linux + BSD.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">make MODE=tiny CPPFLAGS+=-DSUPPORT_VECTOR=0b01110001 <\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"zd-kodirovanie\">\u03b4zd-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>Python \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u043e\u0434\u0430 \u0432 \u0431\u0430\u0437\u0435 Cosmopolitan. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u00ab\u043a\u043e\u0434-\u0433\u043e\u043b\u044c\u0444\u0430\u00bb \u0438 \u0440\u0430\u0434\u0438 \u043b\u0451\u0433\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0445\u043e\u0434 \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e\u0442\u044f\u0436\u0435\u043b\u0435\u0435. \u041b\u0443\u0447\u0448\u0435\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0432 \u0441\u0432\u043e\u0451\u043c \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0436\u0430\u043b\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Python \u0434\u043e 2 \u041c\u0431) \u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0445\u0435\u043c\u043e\u0439 \u0441\u0436\u0430\u0442\u0438\u044f Delta Zig-Zag Deflate \u0438\u043b\u0438, \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438, \u03b4zd.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0436\u0430\u0442\u0438\u044f \u0442\u0438\u043f\u0430 DEFLATE \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0425\u0430\u0444\u0444\u043c\u0430\u043d\u0430 (\u0441 RLE \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 LZ4). \u042d\u0442\u043e \u0443\u0437\u043a\u043e\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u041f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u03b4zd \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0430\u043c \u0442\u0430\u043a\u0430\u044f \u0434\u0438\u043b\u0435\u043c\u043c\u0430? \u0410\u043b\u0444\u0430\u0432\u0438\u0442\u044b \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e, \u044f\u043f\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0438 \u043a\u043e\u0440\u0435\u0439\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u043e\u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u044b. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u044e\u0442\u0441\u044f \u0441 UTF-8. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f Python. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 CJK \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 UNICODE \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043b\u044e\u0434\u0435\u0439 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u0430\u043d \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043d\u043e \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u0445 \u0442\u0430\u043c \u0440\u0430\u0434\u0438 \u0438\u043d\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043a\u0430\u043a Python \u2014 \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u043a\u0438\u043d\u0443\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0448\u0430\u0442\u0451\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0434\u044b \u0432\u0441\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u03b4zd \u043c\u043e\u0436\u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u0443\u0436\u0434\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 Python \u2014 \u044d\u0442\u043e <code>_PyUnicode_PhrasebookOffset2<\/code> \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 178 \u041a\u0431. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e delta-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, zig-zag-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u0442\u0435\u043c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, DEFLATE \u043e\u043d \u0441\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u043e 12 \u041a\u0431. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c \u0443 DEFLATE \u0441 \u0447\u0438\u0441\u0442\u044b\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0425\u0430\u0444\u0444\u043c\u0430\u043d\u0430 \u0438 \u0443 BZIP2 \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0411\u0430\u0440\u0440\u043e\u0443\u0437\u0430 \u2014 \u0423\u0438\u043b\u0435\u0440\u0430 \u0432 10 \u0440\u0430\u0437!<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">_PyUnicode_PhrasebookOffset2: size         is      178,176 bytes _PyUnicode_PhrasebookOffset2: packed size  is      100,224 bytes _PyUnicode_PhrasebookOffset2: rle size     is      282,216 bytes _PyUnicode_PhrasebookOffset2: deflate size is       52,200 bytes _PyUnicode_PhrasebookOffset2: bz2 size     is       76,876 bytes _PyUnicode_PhrasebookOffset2: \u03b4leb size    is       47,198 bytes _PyUnicode_PhrasebookOffset2: \u03b4zd size     is       12,748 bytes <\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/third_party\/python\/Tools\/unicode\/makeunicodedata.py\">third_party\/python\/Tools\/unicode\/makeunicodedata.py<\/a> \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 Python \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Delta-ZigZag-DEFLATE \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">def uleb(a, x):     while True:         b = x &amp; 127         x >>= 7         if x:             a.append(b | 128)         else:             a.append(b)             break  def zig(x):     m = (2 &lt;&lt; x.bit_length()) - 1     return ((x &amp; (m >> 1)) &lt;&lt; 1) ^ (m if x &lt; 0 else 0)  def zleb(a, x):     return uleb(a, zig(x))  def \u03b4zd(data):     n = 0;     i = 0     p = 0     a = bytearray()     for x in data:         zleb(a, x - p)         p = x     return deflate(a), len(a) <\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u043d\u0430 C \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Python \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/libc\/x\/xloadzd.c\">libc\/x\/xloadzd.c<\/a>, <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/libc\/fmt\/unzleb64.c\">libc\/fmt\/unzleb64.c<\/a>, <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/libc\/runtime\/inflate.c\">libc\/runtime\/inflate.c<\/a> \u0438 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/third_party\/zlib\/puff.c\">third_party\/zlib\/puff.c<\/a>. \u041b\u0443\u0447\u0448\u0438\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2014 Puff. \u042d\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443, \u043d\u043e \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f zlib, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u0434\u043b\u0435\u0440. \u0422\u0430\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432 DEFLATE \u0441 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c 2 \u041a\u0431. \u041a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432 DEFLATE, \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Cosmopolitan Libc \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0434\u0430\u044e\u0442 \u043d\u0430 Puff \u0441\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 (strong link) \u043a\u0430\u043a \u043d\u0430 \u00ab\u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0437\u0432\u0435\u043d\u043e\u00bb, \u0430 \u043d\u0430 zlib \u2014 \u0441\u043b\u0430\u0431\u0443\u044e (weak link) (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0432\u0435\u0449\u0435\u0439 \u0432\u0440\u043e\u0434\u0435 malloc). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 Puff \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 zlib \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0435\u0451 \u0441 \u0447\u0435\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c.<\/p>\n<p>  <\/p>\n<h2 id=\"perekrytie-funkciy\">\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a C, \u2014 \u0437\u0430\u043c\u043e\u043a \u0438\u0437\u043e \u043b\u044c\u0434\u0430, \u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u2014 \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430, \u0442\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Intel \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u043e\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 (variable length encoding) \u2014 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u043e\u0433\u043e \u0436\u0435 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u044b\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0445 \u0442\u0440\u0443\u0434\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/   %ip is 0     mov $0xf4,%al     ret  \/   %ip is 1     .byte   0xb0 wut:    hlt \\# and catch fire     ret<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0441\u0451 \u2014 \u043a\u0430\u043a \u0432 \u0448\u0430\u0445\u043c\u0430\u0442\u0430\u0445, \u0433\u0434\u0435 \u0445\u043e\u0434 \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u044e\u044e \u043a\u043b\u0435\u0442\u043a\u0443 \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0441\u044e \u043f\u0430\u0440\u0442\u0438\u044e. \u0410 \u0437\u0434\u0435\u0441\u044c \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0441\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 x86. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435\u043c.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/   SectorLISP code. 89 D6 Assoc:    mov %dx,%si 8B 3C 1:    mov (%si),%di 8B 30   mov (%bx,%si),%si AF      scasw 75 F9   jne 1b F6      .byte   0xF6 8B 39 Cadr: mov (%bx,%di),%di 3C      .byte   0x3C AF    Cdr:  scasw 8B 05 Car:  mov (%di),%ax C3      ret  89 D6          Assoc:   mov %dx,%si 8B 3C          1:   mov (%si),%di 8B 30           mov (%bx,%si),%si AF              scasw 75 F9           jne 1b F6 8B 39 3C AF  testw   $0xaf,0x3c39(%bp,%di) 8B 05           mov (%di),%ax C3              ret  8B 39          Cadr:    mov (%bx,%di),%di 3C AF           cmp $0xaf,%al 8B 05           mov (%di),%ax C3              ret  AF             Cdr: scasw 8B 05           mov (%di),%ax C3              ret  8B 05          Car: mov (%di),%ax C3              ret<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"optimizaciya-printf\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f printf<\/h2>\n<p>  <\/p>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u043e\u0434\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c <code>printf()<\/code>, \u2014 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439:<\/p>\n<p>  <\/p>\n<ul>\n<li>gdtoa \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 double \u0438 long double \u0447\u0435\u0440\u0435\u0437 <code>%f<\/code>, <code>%g<\/code> \u0438 \u0442. \u043f. \u041f\u0440\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435 <code>gdtoa<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 32 \u041a\u0431 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/li>\n<li>\u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0441 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435 (\u0447\u0435\u0440\u0435\u0437 <code>%*s<\/code> \u0438 \u0442. \u043f.) \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0448\u0438\u0440\u0438\u043d\u044b CJK, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0437\u0430\u0439\u043c\u0451\u0442 \u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0438\u0435\u0440\u043e\u0433\u043b\u0438\u0444\u043e\u0432 \u0438\u043b\u0438 \u044d\u043c\u043e\u0434\u0437\u0438.<\/li>\n<li>\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 GNU <code>%m<\/code> \u0434\u043b\u044f <code>strerror()<\/code> \u0432 Cosmopolitan \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e: \u0442\u0430\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0441\u043b\u0443\u0436\u0430\u0442 \u043d\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0430 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u0438\u0441\u043b\u0430. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043b\u044f <code>strerror()<\/code> \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>errno<\/code>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0441\u0442\u0440\u043e\u043a \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 API WIN32. \u041a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 8 \u041a\u0431.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0418 \u0432\u0441\u0451 \u0436\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u044e \u0440\u0430\u0437\u0434\u0443\u0442\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>printf()<\/code>, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/master\/examples\/hello3.c\">examples\/hello3.c<\/a>) \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e 24 \u041a\u0431. \u0418 \u0432\u0441\u0451 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0443 <code>PFLINK()<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/* \u0441\u043c. libc\/fmt\/pflink.h *\/ \/* \u0441\u043c. libc\/stdio\/stdio.h *\/ #define printf(FMT, ...) (printf)(PFLINK(FMT), ##__VA_ARGS__) #define PFLINK(...) _PFLINK(__VA_ARGS__) #define _PFLINK(FMT, ...)                                             \\   ({                                                                  \\     if (___PFLINK(FMT, strpbrk, \"faAeg\")) STATIC_YOINK(\"__fmt_dtoa\"); \\     if (___PFLINK(FMT, strpbrk, \"cmrqs\")) {                           \\       if (___PFLINK(FMT, strstr, \"%m\")) STATIC_YOINK(\"strerror\");     \\       if (!IsTiny() &amp;&amp; (___PFLINK(FMT, strstr, \"%*\") ||               \\                         ___PFLINK(FMT, strpbrk, \"0123456789\"))) {     \\         STATIC_YOINK(\"strnwidth\");                                    \\         STATIC_YOINK(\"strnwidth16\");                                  \\         STATIC_YOINK(\"wcsnwidth\");                                    \\       }                                                               \\     }                                                                 \\     FMT;                                                              \\   }) #define ___PFLINK(FMT, FN, C) \\   !__builtin_constant_p(FMT) || ((FMT) &amp;&amp; __builtin_##FN(FMT, C) != NULL) <\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 GCC, \u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432 Clang. \u0418 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 printf() \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b. GCC \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u00ab\u0443\u043c\u0430\u00bb \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 <code>__builtin_strstr()<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u042d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>constexpr<\/code> \u043d\u0430 C++. \u041a\u043e\u0433\u0434\u0430 GCC \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u0435\u0441\u0438\u0442, \u043e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u00ab\u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u043c\u00bb (yoinking).<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0441 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 ELF \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0437\u0432\u0430\u043b\u0430 \u0431\u044b \u00ab\u0438\u0433\u0440\u043e\u0439 \u0432 \u0441\u043b\u0430\u0431\u043e\u0435 \u0437\u0432\u0435\u043d\u043e \u0441\u043e \u0441\u043b\u0430\u0431\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438\u00bb (weak linking). \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f printf() \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u0434 \u0432\u0440\u043e\u0434\u0435 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">      case 'm':         p = weaken(strerror) ? weaken(strerror)(lasterr) : \"?\";         signbit = 0;         goto FormatString; <\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 weaken \u00ab\u0441\u043b\u0430\u0431\u044b\u043c \u0437\u0432\u0435\u043d\u043e\u043c\u00bb, \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u043a \u043d\u0435\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e\u0433\u043e (strong reference) \u0438\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e (normal reference) \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u2014 \u00ab\u0432\u044b\u0434\u0435\u0440\u043d\u0443\u0442\u044c\u00bb (yoink) \u0435\u0451. \u041e\u0434\u043d\u0430\u043a\u043e \u00ab\u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u00bb \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043e\u0441\u043e\u0431\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">.section .yoink noplsymbol .previous <\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u00abyoink\u00bb \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043d\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">  \/DISCARD\/ : {     *(.yoink)   } <\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u0430, \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c ld.bfd \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u0435\u043d, \u043d\u043e \u043e\u043d \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435\u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u00ab\u0432\u044b\u0434\u0435\u0440\u043d\u0443\u0442\u00bb \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0410 \u0432\u043e\u0442 \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u044f\u0432\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043c\u043e\u0449\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0433\u0440\u0435\u0445\u043e\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u00ab\u0432\u044b\u0434\u0435\u0440\u043d\u0435\u0442\u00bb \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0438\u0445 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u00ab\u043d\u0430 \u043b\u0451\u0433\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0438\u043b\u044b\u00bb, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0442\u043e\u043c \u00ab\u0440\u0430\u0441\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u0442\u044c\u00bb \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>printf()<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">(printf)(\"last error is %m\\n\"); <\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 <code>PFLINK()<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u00ab\u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u0442\u044c\u00bb \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f <code>main()<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">STATIC_YOINK(\"strerror\"); <\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"malenkiy-portabelnyy-elf\">\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 ELF<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/cosmopolitan\/howfat.html\">\u00ab\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043b\u0441\u0442\u044b\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u0441\u0442\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442?\u00bb<\/a> \u043c\u043e\u0436\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Cosmopolitan Actually Portable Executable. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0442\u0430\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u0430\u043a <code>SUPPORT_VECTOR<\/code>, \u0434\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u0441\u044e \u043c\u043e\u0449\u044c \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u044b\u043c\u0438, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f [\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e].<\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043a\u0443, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0446\u0435\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f ELF, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a Linux, FreeBSD, NetBSD \u0438 OpenBSD. \u0410 \u0435\u0449\u0451 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043d\u0443\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0431\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u0438 APE \u0438 Cosmo. \u042d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0438 \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451. \u0410 \u0441\u0430\u043c\u043e\u0435 \u043a\u043b\u0430\u0441\u0441\u043d\u043e\u0435 \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u2014 \u0432\u0441\u0435\u0433\u043e 386 \u0431\u0430\u0439\u0442, \u0430 \u043a\u043e\u0434 \u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0438 \u0441 \u043b\u0443\u0447\u0448\u0438\u043c\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c \u0430\u043a\u0441\u0438\u043e\u043c\u043e\u0439, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434 \u043d\u0435\u0451. \u042d\u0442\u043e \u0438\u043c\u0435\u043b\u043e \u0441\u043c\u044b\u0441\u043b \u0432 \u044d\u043f\u043e\u0445\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043c\u0438 \u0436\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438, \u0447\u0442\u043e \u0438 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u043e\u0434 \u043d\u0438\u0445. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f \u0432\u0441\u0451 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0412 \u0430\u0432\u0433\u0443\u0441\u0442\u0435 2022 \u0433\u043e\u0434\u0430 485 \u0438\u0437 500 \u043b\u0443\u0447\u0448\u0438\u0445 \u0441\u0443\u043f\u0435\u0440\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 x86-64. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 x86 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0414\u0430, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u2014 \u043f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u2014 \u0432\u0435\u0440\u044f\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0443\u0436\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0443 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0449\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">int add(int x, int y) {   return x + y; } <\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435, \u0433\u0434\u0435 \u0431\u044b \u0432\u044b \u0435\u0433\u043e \u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u2014 \u043d\u0430 Linux, FreeBSD, NetBSD \u0438\u043b\u0438 \u043d\u0430 OpenBSD:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">add:lea(%rdi,%rsi,1),%eax ret <\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u043d\u0435\u043a\u0438\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b Linux \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 OpenBSD? \u041f\u0440\u0438\u0447\u0438\u043d \u0442\u043e\u043c\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0430\u043c \u0444\u043e\u0440\u043c\u0430\u0442 ELF \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (ABI) \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432). \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 FreeBSD ABI. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e FreeBSD \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 UNIX, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044d\u0442\u043e \u043f\u043e\u043b\u0435. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, NetBSD \u0438 OpenBSD \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 ELF PT_NOTE. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Linux, \u043e\u043d\u0430 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u0441\u044f. \u0412\u043e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b FreeBSD \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0434\u043b\u044f NetBSD \u0438 OpenBSD, \u043d\u0430\u0448 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 ELF \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>PT_LOAD<\/code> \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0437\u043d\u0430\u0451\u0442, \u043a\u0430\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b <code>PT_LOAD<\/code> \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u0444\u0430\u0439\u043b\u0430. \u042d\u0442\u043e \u0440\u0430\u0432\u043d\u043e\u0441\u0438\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439, OpenBSD \u043e\u0442\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0414\u0440\u0443\u0433\u0438\u043c \u044f\u0434\u0440\u0430\u043c \u044d\u0442\u043e \u0431\u0435\u0437\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0430\u044f \u043d\u0438\u0436\u0435 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u0442 \u0438\u0445 \u043f\u043e \u0443\u0437\u043a\u043e\u0439 \u0434\u043e\u0440\u043e\u0436\u043a\u0435, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 x86 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/* reallytiny-elf.S *\/ #define ELFCLASS64 2 #define ELFDATA2LSB 1 #define ELFOSABI_FREEBSD 9 #define ET_EXEC 2 #define EM_NEXGEN32E 62 #define PT_LOAD 1 #define PT_NOTE 4 #define PF_X 1 #define PF_W 2 #define PF_R 4  .align8 ehdr:.ascii\"\\177ELF\" .byteELFCLASS64 .byteELFDATA2LSB .byte1 .byteELFOSABI_FREEBSD .quad0 .wordET_EXEC# e_type .wordEM_NEXGEN32E# e_machine .long1# e_version .quad_start# e_entry .quadphdrs - ehdr# e_phoff .quad0# e_shoff .long0# e_flags .word64# e_ehsize .word56# e_phentsize .word2# e_phnum .word0# e_shentsize .word0# e_shnum .word0# e_shstrndx .globlehdr  .align8 phdrs:.longPT_LOAD# p_type .longPF_R|PF_X# p_flags .quad0# p_offset .quadehdr# p_vaddr .quadehdr# p_paddr .quadfilesz# p_filesz .quadfilesz# p_memsz .quad64# p_align  #if 0  \/\/ \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u043c openbsd \u043f\u0440\u0438 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 bss .longPT_LOAD# p_type .longPF_R|PF_W# p_flags .quad0# p_offset .quadbss# p_vaddr .quadbss# p_paddr .quad0# p_filesz .quadbsssize# p_memsz .quad64# p_align #endif  .longPT_NOTE# p_type .longPF_R# p_flags .quadnote - ehdr# p_offset .quadnote# p_vaddr .quadnote# p_paddr .quadnotesize# p_filesz .quadnotesize# p_memsz .quad8# p_align  note:.long2f-1f .long4f-3f .long1 1:.asciz\"OpenBSD\" 2:.align4 3:.long0 4:.long2f-1f .long4f-3f .long1 1:.asciz\"NetBSD\" 2:.align4 3:.long901000000 4:notesize = . - note  _start:mov%rsp,%rsi jmpStart .globl_start<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Start()<\/code> \u2014 \u0438 \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 UNIX \u043d\u0443\u0436\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <code>int write(fd, data, size)<\/code>, \u0433\u0434\u0435 <code>fd<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>1<\/code>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434. \u0418 \u0441\u043d\u043e\u0432\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0445\u043e\u0436\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u00ab\u0432\u0441\u0442\u0440\u044f\u0441\u043a\u0438\u00bb \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0435\u0451 \u0432\u044b\u0437\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 C \u0447\u0438\u0441\u043b\u043e. \u042d\u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u00abmagnum\u00bb, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e ABI. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043b\u043e\u0445\u043e \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442 \u0447\u0438\u0441\u043b\u0430 magnum. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 Linux write() \u044d\u0442\u043e 1, \u0430 \u0443 BSD \u2014 4. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>write()<\/code> \u0438\u0437 Linux \u043d\u0430 BSD, \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>exit()<\/code>. \u041d\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438!<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u043c\u0441\u043b\u0430 (magnum) \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b UNIX (x86-64)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/td>\n<td>Linux<\/td>\n<td>FreeBSD<\/td>\n<td>OpenBSD<\/td>\n<td>NetBSD<\/td>\n<\/tr>\n<tr>\n<td>exit<\/td>\n<td>60<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>fork<\/td>\n<td>57<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>read<\/td>\n<td>0<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>write<\/td>\n<td>1<\/td>\n<td>4<\/td>\n<td>4<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>open<\/td>\n<td>2<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>close<\/td>\n<td>3<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>stat<\/td>\n<td>4<\/td>\n<td>n\/a<\/td>\n<td>38<\/td>\n<td>439<\/td>\n<\/tr>\n<tr>\n<td>fstat<\/td>\n<td>5<\/td>\n<td>551<\/td>\n<td>53<\/td>\n<td>440<\/td>\n<\/tr>\n<tr>\n<td>poll<\/td>\n<td>7<\/td>\n<td>209<\/td>\n<td>252<\/td>\n<td>209<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e magnum, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e BSD, \u0440\u0430\u0437\u043d\u043e\u0433\u043b\u0430\u0441\u0438\u0439 \u043d\u0435\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u0440\u0435\u0432\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b UNIX, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0432 Bell Labs. \u0427\u0438\u0441\u043b\u0430 \u0432\u0440\u043e\u0434\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0434\u043b\u044f <code>exit()<\/code> \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b Bell System Five. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e System V Application Binary Interface. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u2014 \u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>magnum \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 UNIX (i386)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/td>\n<td>Linux<\/td>\n<td>FreeBSD<\/td>\n<td>OpenBSD<\/td>\n<td>NetBSD<\/td>\n<\/tr>\n<tr>\n<td>exit<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>fork<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>read<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>write<\/td>\n<td>4<\/td>\n<td>4<\/td>\n<td>4<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>open<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>close<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>stat<\/td>\n<td>18<\/td>\n<td>n\/a<\/td>\n<td>38<\/td>\n<td>439<\/td>\n<\/tr>\n<tr>\n<td>fstat<\/td>\n<td>108<\/td>\n<td>551<\/td>\n<td>53<\/td>\n<td>440<\/td>\n<\/tr>\n<tr>\n<td>poll<\/td>\n<td>168<\/td>\n<td>209<\/td>\n<td>252<\/td>\n<td>209<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u041e\u0421 x86-64 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c magnum, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u043e\u0448\u0438\u0431\u043a\u0438. \u041d\u043e \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0434\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u043d\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438\u0436\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/* reallytiny.c *\/ #define LINUX   1 #define OPENBSD 16 #define FREEBSD 32 #define NETBSD  64  #ifndef SUPPORT_VECTOR #define SUPPORT_VECTOR (LINUX | FREEBSD | NETBSD | OPENBSD) #endif  #define SupportsLinux()   (SUPPORT_VECTOR &amp; LINUX) #define SupportsFreebsd() (SUPPORT_VECTOR &amp; FREEBSD) #define SupportsOpenbsd() (SUPPORT_VECTOR &amp; OPENBSD) #define SupportsNetbsd()  (SUPPORT_VECTOR &amp; NETBSD)  #define IsLinux()   (SupportsLinux() &amp;&amp; os == LINUX) #define IsFreebsd() (SupportsFreebsd() &amp;&amp; os == FREEBSD) #define IsOpenbsd() (SupportsOpenbsd() &amp;&amp; os == OPENBSD) #define IsNetbsd()  (SupportsNetbsd() &amp;&amp; os == NETBSD)  __attribute__((__noreturn__)) static void Exit(int rc, int os) {   asm volatile(\"syscall\"                : \/* \u043d\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 *\/                : \"a\"(IsLinux() ? 60 : 1), \"D\"(rc)                : \"memory\");   __builtin_unreachable(); }  static int Write(int fd, const void *data, int size, int os) {   char cf;   int ax, dx;   asm volatile(\"clc\\n\\t\"                \"syscall\"                : \"=a\"(ax), \"=d\"(dx), \"=@ccc\"(cf)                : \"0\"(IsLinux() ? 1 : 4), \"D\"(fd), \"S\"(data), \"1\"(size)                : \"rcx\", \"r11\", \"memory\", \"cc\");   if (cf) ax = -ax;   return ax; }  static int Main(int argc, char **argv, char **envp, long *auxv, int os) {   Write(1, \"hello world\\n\", 12, os);   return 0; }  __attribute__((__noreturn__)) void Start(long di, long *sp) {   long *auxv;   int i, os, argc;   char **argv, **envp, *page;    \/\/ freebsd   if (SupportsFreebsd() &amp;&amp; di) {     os = FREEBSD;     sp = (long *)di;   } else {     os = 0;   }    \/\/ \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432   argc = *sp;   argv = (char **)(sp + 1);   envp = (char **)(sp + 1 + argc + 1);   auxv = (long *)(sp + 1 + argc + 1);   for (;;) {     if (!*auxv++) {       break;     }   }    \/\/ openbsd   if (SupportsOpenbsd() &amp;&amp; !os &amp;&amp; !auxv[0]) {     os = OPENBSD;   }    \/\/ netbsd   if (SupportsNetbsd() &amp;&amp; !os) {     for (; auxv[0]; auxv += 2) {       if (auxv[0] == 2014 \/* AT_EXECFN *\/) {         os = NETBSD;         break;       }     }   }    \/\/ \u041e\u0421 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   if (!os) {     os = LINUX;   }    Exit(Main(argc, argv, envp, auxv, os), os); } <\/code><\/pre>\n<p>  <\/p>\n<p>FreeBSD \u043b\u044e\u0431\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 %RDI (\u0442\u043e \u0435\u0441\u0442\u044c, \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 System V ABI) \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 %RSP. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 C \u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0441 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0448\u0442\u0443\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 %RSP \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0432\u0445\u043e\u0434\u0430. \u041d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 %RDI \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u043e\u043b\u044c.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u044b\u0441\u043a\u0440\u0435\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 x86-64 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>_start()<\/code>, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0440\u0435\u0432\u043d\u0435\u043c\u0443 ABI i386, \u0433\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0435\u043a\u0435, \u0430 \u043d\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <code>argc<\/code>, <code>argv<\/code> \u0438 <code>environ<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0430 C \u0435\u0441\u0442\u044c \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f auxv, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. OpenBSD \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0430 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0442\u0430\u043c \u043d\u0435\u0442, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e OpenBSD. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f NetBSD, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0447\u0435\u043c \u043b\u044e\u0431\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c NetBSD \u043e\u0442 Linux. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438! \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c SYSCALL.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 C \u0435\u0441\u0442\u044c \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 auxv. \u0415\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u00ab\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00bb (auxiliary values). \u0412 OpenBSD \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 OpenBSD. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f NetBSD, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u043e magnum. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u0438 \u0442\u043e\u0433\u0434\u0430 \u043e\u0442\u043b\u0438\u0447\u0438\u043c NetBSD \u043e\u0442 Linux. \u041d\u0443 \u0432\u043e\u0442 \u0438 \u0432\u0441\u0451! \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. BSD \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 System V ABI. \u0410 \u0432 \u044d\u0442\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. BSD \u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0438 386BSD \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u043b\u0430\u0433\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430. \u042d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 RAX, \u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, Linux \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>EFLAGS<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>CLC<\/code> \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u041c\u044b \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u043b\u0430\u0433 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 BSD, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u0443\u0434\u0430\u043b\u0441\u044f. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b System V.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 asm \u043c\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c GCC, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RDX \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d. \u0422\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 BSD, \u043d\u043e \u043d\u0435 \u043d\u0430 Linux. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b BSD \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0441\u0442\u0435\u043a\u0435. Linux \u0436\u0435 <em>\u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/em> \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 6 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0438\u0434\u0443\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b RDI, RSI, RDX, R10, R8 \u0438 R9.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d, \u043d\u0443\u0436\u0435\u043d \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043a\u043e\u0434 C \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/* reallytiny.lds *\/ ENTRY(_start)  SECTIONS {   . = 0x400000;   .text : {     *(.text)     *(.rodata .rodata.*)   }   filesz = . - ehdr;   textsz = . - _start;   .bss ALIGN(4096) : {     bss = .;     *(.bss)     . = ALIGN(4096);   }   memsz = . - ehdr;   \/DISCARD\/ : {     *(.*)   } }  bsssize = SIZEOF(.bss); textoff = _start - ehdr; <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u0443\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">gcc -static -no-pie -g -Os \\   -o reallytiny.elf.dbg \\   -Wl,-T,reallytiny.lds \\   reallytiny-elf.S \\   reallytiny.c objcopy -S -O binary \\   reallytiny.elf.dbg \\   reallytiny.elf <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/webt\/oh\/iu\/gm\/ohiugmqn1r0sugvlabeg3wqk4qu.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/oh\/iu\/gm\/ohiugmqn1r0sugvlabeg3wqk4qu.png\" alt=\"[reallytinyelf.png]\" data-src=\"https:\/\/habrastorage.org\/webt\/oh\/iu\/gm\/ohiugmqn1r0sugvlabeg3wqk4qu.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">linux$ .\/reallytiny.elf hello world freebsd$ .\/reallytiny.elf hello world netbsd$ .\/reallytiny.elf hello world openbsd$ .\/reallytiny.elf hello world <\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430 400 \u0431\u0430\u0439\u0442 \u2014 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e! \u042d\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/justine.lol\/sizetricks\/#elfreallytiny-elf.S\">reallytiny-elf.S<\/a><\/li>\n<li><a href=\"https:\/\/justine.lol\/sizetricks\/#elfreallytiny.c\">reallytiny.c<\/a><\/li>\n<li><a href=\"https:\/\/justine.lol\/sizetricks\/#elfreallytiny.lds\">reallytiny.lds<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f.<\/p>\n<p>  <\/p>\n<blockquote><p><a href=\"https:\/\/skillfactory.ru\/catalogue?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=sf_allcourses_130922&amp;utm_term=conc\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ww\/cm\/7l\/wwcm7lp_rqq9o3_22aweobgopze.png\" align=\"left\" title=\"\u0421\u043a\u0438\u0434\u043a\u0430 45% \u043f\u043e \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\u0443 HABR\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ww\/cm\/7l\/wwcm7lp_rqq9o3_22aweobgopze.png\"\/><\/a><br \/>  <strong>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441 \u0434\u043d\u0451\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043d\u0430\u0432\u044b\u043a\u0438:<\/strong>  <\/p>\n<ul>\n<li><u><a href=\"https:\/\/skillfactory.ru\/data-scientist-pro?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=data-science_dspr_130922&amp;utm_term=main\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e Data Science<\/a><\/u>. \u0421\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f \u0437\u0430 24 \u043c\u0435\u0441\u044f\u0446\u0430.  <\/li>\n<li><u><a href=\"https:\/\/skillfactory.ru\/python-fullstack-web-developer?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=coding_fpw_130922&amp;utm_term=conc\">\u00abFullstack-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 Python\u00bb<\/a><\/u>. \u0421\u0442\u0430\u043d\u044c\u0442\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u043c-\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u043e\u043c \u0437\u0430 15 \u043c\u0435\u0441\u044f\u0446\u0435\u0432.  <\/li>\n<li><u><a href=\"https:\/\/skillfactory.ru\/start-it-specialist-proforientaciya?utm_source=habr&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=sf_start_130922&amp;utm_term=main\">\u00ab\u0423\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0432 IT\u00bb<\/a><\/u>. \u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u043d\u0430\u0448 \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432: \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 9 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439 \u0438 \u043e\u0441\u0432\u043e\u0439\u0442\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0430\u043c.  <\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<\/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\/skillfactory\/blog\/688078\/\"> https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/688078\/<\/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\">\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043b\u043e\u0432\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0421\/\u0421++\/Python \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0434\u043b\u044f x86. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b <a href=\"https:\/\/github.com\/jart\/cosmopolitan\">Cosmopolitan<\/a>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u043e\u0442\u0437\u044b\u0432\u0430 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 <a href=\"http:\/\/elks.sourceforge.net\/\">ELKS<\/a> \u044f \u0443\u0437\u043d\u0430\u043b\u0430, \u0447\u0442\u043e \u043c\u043e\u0439 \u043a\u043e\u0434 \u0442\u0430\u043c \u0432\u0441\u0435\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438 \u043e\u043d\u0438 \u0445\u043e\u0442\u044f\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0440\u044e\u043a\u0438 cosmo \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c \u0432\u0440\u043e\u0434\u0435 \u00abLinux-\u043f\u043e\u0440\u0442\u0430 i8086\u00bb. \u042f \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430, \u0447\u0442\u043e \u043c\u044b \u0441 \u0440\u0435\u0431\u044f\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ELKS \u00ab\u043e\u0434\u043d\u043e\u0439 \u043a\u0440\u043e\u0432\u0438\u00bb, \u0432\u0435\u0434\u044c \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 Cosmopolitan, \u2014 \u044d\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a i8086, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f <a href=\"https:\/\/justine.lol\/sizetricks\/#elf..\/ape.html\">Actually Portable Executable<\/a>. \u0410 \u0435\u0449\u0451 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438\u0441\u044c \u0432 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0435\u043d\u044f, \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u043c\u043e\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 Cosmopolitan. \u0418 \u0442\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b\u0430, \u0447\u0442\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/688078\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fz\/j8\/2s\/fzj82s9csxx81rj8iyj7ph38l3q.png\" alt=\"[Shinmyoumaru Sukuna]\" data-src=\"https:\/\/habrastorage.org\/webt\/fz\/j8\/2s\/fzj82s9csxx81rj8iyj7ph38l3q.png\"\/><\/a><\/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-338323","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338323","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=338323"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338323\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}