{"id":336423,"date":"2022-08-01T15:00:08","date_gmt":"2022-08-01T15:00:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336423"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336423","title":{"rendered":"<span>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f: \u0414\u0430 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u044d\u0442\u043e\u0442 Legacy<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f. \u041e\u043f\u0438\u0441\u0430\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Legacy MBR \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c (\u0431\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439) \u0438 \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c &#171;\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c&#187; \u044d\u0442\u0443 \u0441\u0435\u0440\u0438\u044e (\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u0435\u0439). \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 \u0430\u0432\u0433\u0443\u0441\u0442 2022 \u0433\u043e\u0434\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u041f\u041e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 (U)EFI-\u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<h2>\u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 &#8212; \u0432\u0441\u0435\u043c\u0443 \u0433\u043e\u043b\u043e\u0432\u0430!<\/h2>\n<p>\u041d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0443 \u0434\u0440\u0443\u0433\u0438\u0445  \u043b\u044e\u0434\u0435\u0439, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u0432\u043b\u044e\u0431\u043b\u0435\u043d \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b \u044f \u043d\u0430 \u043d\u0435\u0433\u043e, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0432 Python, \u0430 \u043d\u0435  \u0421 \u0438\u043b\u0438 \u0424\u043e\u0440\u0442\u0440\u0430\u043d. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f \u0431\u0443\u0434\u0443 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e &#8212; <a href=\"https:\/\/flatassembler.com\" rel=\"noopener noreferrer nofollow\">fasm<\/a>, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0435\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<h2>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435&#8230;<\/h2>\n<p>\u042f \u043d\u0430\u0437\u043e\u0432\u0443 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445: \u044d\u0442\u043e Legacy, \u0438\u043b\u0438 \u0436\u0435 MBR, \u0438 Secure, \u0438\u043b\u0438 \u0436\u0435 EFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438 \u043d\u0435 \u043d\u0430\u043f\u0443\u0442\u0430\u043b). \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043f\u0438\u0441\u0430\u043b \u0434\u0432\u0443\u0445-\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a: MBR \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e-\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 SSB (Second-Stage Bootloader, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a 2 \u0441\u0442\u0430\u0434\u0438\u0438). \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c EFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a.<\/p>\n<h2>\u041a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f UEFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438?<\/h2>\n<p>\u041d\u0443, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u043e\u0441 (\u0432\u0440\u043e\u0434\u0435 \u0441 F000:FFFF \u0438\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043c), \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 POST (Power On Self Test), \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u041e\u041a, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 (U)EFI. UEFI \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0449\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 (ntfs, brtfs, extFAT, FAT32, isofs, cdfs, ext2\/3\/4, \u0435\u0441\u0442\u044c \u0435\u0449\u0451, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e), \u0438\u0449\u0435\u0442 \u043d\u0430 \u043d\u0438\u0445 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0441\u0443 <code>\/EFI\/BOOT\/<\/code> \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u0442 <code>*.efi<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>bootX.efi<\/code> \u0433\u0434\u0435 \u0425 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a. \u0412 \u0446\u0435\u043b\u043e\u043c, \u044d\u0442\u043e \u0432\u0441\u0451. (\u0430\u0445, \u0434\u0430, \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b: UEFI32 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 <code>bootia32.efi<\/code> \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 UEFI64 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 <code>bootx64.efi<\/code> \u0432 \u0434\u043e\u043b\u0433\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435).<\/p>\n<h2>\u0427\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435 efi-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?<\/h2>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u044d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 PE (Portable Excutable, \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f Microsoft Windows, *.exe, *.msi, *.dll, *.sys), \u043e\u043d \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IDA!<\/p>\n<h2>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c!<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u043e\u0441\u0442\u043e exe-\u0448\u043d\u0438\u043a \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442. \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 format \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"assembly\">format PE64 DLL EFI<\/code><\/pre>\n<p>\u041f\u043e\u0442\u043e\u043c, \u0431\u0443\u0434\u0435\u0442 \u043d\u0443 \u043f\u0440\u044f\u043c \u041e\u0427\u0415\u041d\u042c (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u041f\u0420\u042f\u041c \u043e\u0447\u0435\u043d\u044c, \u043d\u043e \u0431\u0443\u0434\u0435\u0442) \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c efi-app \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u0441\u0432\u043e\u044e (\u043b\u0438\u0441\u0442\u0438\u043d\u0433 1, 2, 3).<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 1 (sysuefi.inc) &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0436\u0438\u0437\u043d\u044c \u043c\u0435\u0434\u043e\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 2 (libuefi.inc) &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 __, \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0432 \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 3<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 3 (macroefi.inc) &#8212; \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0430\u043c\u0438 1 \u0438 2, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a struct.inc, \u0433\u0443\u043b\u044f\u044e\u0449\u0435\u0439 \u043f\u043e \u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u043c. \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0430\u0445 \u044f \u0435\u0451 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0432\u043e\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442-\u0442\u0430\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443 \u043d\u0430\u0448\u0435\u0433\u043e &#171;\u043f\u0440\u043e\u0435\u043a\u0442\u0430&#187; (\u0440\u0438\u0441. 1)<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/24b\/397\/f78\/24b397f78fed4f9a4d0708a0284b0cad.png\" alt=\"\u0440\u0438\u0441. 1: \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\" title=\"\u0440\u0438\u0441. 1: \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\" width=\"205\" height=\"227\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24b\/397\/f78\/24b397f78fed4f9a4d0708a0284b0cad.png\"\/><figcaption>\u0440\u0438\u0441. 1: \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u043b\u0438\u0441\u0442\u0438\u043d\u0433 1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">; sysuefi.inc for fasm assembly ;  struc int8 {   align 1   . db ? } struc int16 {   align 2   . dw ?   align 1 } struc int32 {   align 4   . dd ?   align 1 } struc int64 {   align 8   . dq ?   align 1 } struc intn {   align 8   . dq ?   align 1 } struc dptr {   align 8   . dq ?   align 1 }   ;symbols   EFIERR = 0x8000000000000000 EFI_SUCCESS= 0 EFI_LOAD_ERROR= EFIERR or 1 EFI_INVALID_PARAMETER= EFIERR or 2 EFI_UNSUPPORTED = EFIERR or 3 EFI_BAD_BUFFER_SIZE= EFIERR or 4 EFI_BUFFER_TOO_SMALL= EFIERR or 5 EFI_NOT_READY= EFIERR or 6 EFI_DEVICE_ERROR= EFIERR or 7 EFI_WRITE_PROTECTED= EFIERR or 8 EFI_OUT_OF_RESOURCES= EFIERR or 9 EFI_VOLUME_CORRUPTED= EFIERR or 10 EFI_VOLUME_FULL = EFIERR or 11 EFI_NO_MEDIA= EFIERR or 12 EFI_MEDIA_CHANGED= EFIERR or 13 EFI_NOT_FOUND= EFIERR or 14 EFI_ACCESS_DENIED= EFIERR or 15 EFI_NO_RESPONSE = EFIERR or 16 EFI_NO_MAPPING= EFIERR or 17 EFI_TIMEOUT= EFIERR or 18 EFI_NOT_STARTED = EFIERR or 19 EFI_ALREADY_STARTED= EFIERR or 20 EFI_ABORTED= EFIERR or 21 EFI_ICMP_ERROR= EFIERR or 22 EFI_TFTP_ERROR= EFIERR or 23 EFI_PROTOCOL_ERROR= EFIERR or 24   macro structure name {   virtual at 0     name name   end virtual }   ;structureures EFI_SYSTEM_TABLE_SIGNATUREequ49h,42h,49h,20h,53h,59h,53h,54h struc EFI_TABLE_HEADER {  .Signature    int64  .Revision     int32  .HeaderSize   int32  .CRC32        int32  .Reserved     int32 } structure EFI_TABLE_HEADER   struc EFI_SYSTEM_TABLE {  .Hdr        EFI_TABLE_HEADER  .FirmwareVendor        dptr  .FirmwareRevision      int32  .ConsoleInHandle       dptr  .ConIn         dptr  .ConsoleOutHandle      dptr  .ConOut        dptr  .StandardErrorHandle   dptr  .StdErr        dptr  .RuntimeServices       dptr  .BootServices        dptr  .NumberOfTableEntries  intn  .ConfigurationTable    dptr } structure EFI_SYSTEM_TABLE   struc SIMPLE_TEXT_OUTPUT_INTERFACE {  .Reset     dptr  .OutputString    dptr  .TestString    dptr  .QueryMode    dptr  .SetMode    dptr  .SetAttribute    dptr  .ClearScreen    dptr  .SetCursorPosition dptr  .EnableCursor    dptr  .Mode    dptr } structure SIMPLE_TEXT_OUTPUT_INTERFACE   ;---include ends   struc SIMPLE_INPUT_INTERFACE {  .Resetdptr  .ReadKeyStrokedptr  .WaitForKeydptr } structure SIMPLE_INPUT_INTERFACE   struc EFI_BOOT_SERVICES_TABLE {  .Hdr       EFI_TABLE_HEADER  .RaisePrioritydptr  .RestorePrioritydptr  .AllocatePagesdptr  .FreePagesdptr  .GetMemoryMapdptr  .AllocatePooldptr  .FreePooldptr  .CreateEventdptr  .SetTimerdptr  .WaitForEventdptr  .SignalEventdptr  .CloseEventdptr  .CheckEventdptr  .InstallProtocolInterface dptr  .ReInstallProtocolInterface dptr  .UnInstallProtocolInterface dptr  .HandleProtocoldptr  .Voiddptr  .RegisterProtocolNotify dptr  .LocateHandledptr  .LocateDevicePathdptr  .InstallConfigurationTable dptr  .ImageLoaddptr  .ImageStartdptr  .Exitdptr  .ImageUnLoaddptr  .ExitBootServicesdptr  .GetNextMonotonicCountdptr  .Stalldptr  .SetWatchdogTimerdptr  .ConnectControllerdptr  .DisConnectControllerdptr  .OpenProtocoldptr  .CloseProtocoldptr  .OpenProtocolInformation dptr  .ProtocolsPerHandledptr  .LocateHandleBufferdptr  .LocateProtocoldptr  .InstallMultipleProtocolInterfaces dptr  .UnInstallMultipleProtocolInterfaces dptr  .CalculateCrc32dptr  .CopyMemdptr  .SetMemdptr } structure EFI_BOOT_SERVICES_TABLE   struc EFI_RUNTIME_SERVICES_TABLE {  .Hdr       EFI_TABLE_HEADER  .GetTimedptr  .SetTimedptr  .GetWakeUpTimedptr  .SetWakeUpTimedptr  .SetVirtualAddressMapdptr  .ConvertPointerdptr  .GetVariabledptr  .GetNextVariableNamedptr  .SetVariabledptr  .GetNextHighMonoCountdptr  .ResetSystemdptr } structure EFI_RUNTIME_SERVICES_TABLE   struc EFI_TIME {  .Yearint16  .Monthint8  .Dayint8  .Hourint8  .Minuteint8  .Secondint8  .Pad1int8  .Nanosecondint32  .TimeZoneint16  .Daylightint8  .Pad2int8  .sizeofrb 1 } structure EFI_TIME   EFI_LOADED_IMAGE_PROTOCOL_UUID equ 0A1h,31h,1bh,5bh,62h,95h,0d2h,11h,8Eh,3Fh,0h,0A0h,0C9h,69h,72h,3Bh struc EFI_LOADED_IMAGE_PROTOCOL {  .Revisionint32  .ParentHandleint64  .SystemTabledptr  .DeviceHandleint64  .FilePathdptr  .Reservedint64  .LoadOptionsSizeint32  .ImageBasedptr  .ImageSizeint64  .ImageCodeTypeint32  .ImageDataTypeint32  .UnLoaddptr } structure EFI_LOADED_IMAGE_PROTOCOL   EFI_BLOCK_IO_PROTOCOL_UUID equ 21h,5bh,4eh,96h,59h,64h,0d2h,11h,8eh,39h,00h,0a0h,0c9h,69h,72h,3bh struc EFI_BLOCK_IO_PROTOCOL {  .Revisionint64  .Mediadptr  .Resetdptr  .ReadBlocksdptr  .WriteBlocksdptr  .FlushBlocksdptr } structure EFI_BLOCK_IO_PROTOCOL   struc EFI_BLOCK_IO_MEDIA {  .MediaIdint32  .RemovableMediaint8  .MediaPresentint8  .LogicalPartitionint8  .ReadOnlyint8  .WriteCachingint8  .BlockSizeint32  .IoAlignint32  .LastBlockint64 } structure EFI_BLOCK_IO_MEDIA   EFI_GRAPHICS_OUTPUT_PROTOCOL_UUID equ 0deh, 0a9h, 42h,90h,0dch,023h,38h,04ah,96h,0fbh,7ah,0deh,0d0h,80h,51h,6ah struc EFI_GRAPHICS_OUTPUT_PROTOCOL {  .QueryModedptr  .SetModedptr  .Bltdptr  .Modedptr } structure EFI_GRAPHICS_OUTPUT_PROTOCOL   struc EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE {  .MaxModeint32  .CurrentModeint32  .ModeInfodptr  .SizeOfModeInfointn  .FrameBufferBasedptr  .FrameBufferSizeintn } structure EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE   struc EFI_GRAPHICS_OUTPUT_MODE_INFORMATION {  .Versionint32  .HorizontalResolutionint32  .VerticalResolutionint32  .PixelFormatint32  .RedMaskint32  .GreenMaskint32  .BlueMaskint32  .Reservedint32  .PixelsPerScanlineint32 } structure EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  macro InitializeLib { clc orrdx, rdx jz.badout cmpdword [rdx], 20494249h je@f .badout:  xorrcx, rcx xorrdx, rdx stc @@:mov[efi_handler], rcx mov[efi_ptr], rdx }  macro uefi_call_wrapperinterface,function,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11 { numarg = 0 if ~ arg11 eq  numarg = numarg + 1  if ~ arg11 eq rdi movrdi, arg11  end if end if if ~ arg10 eq  numarg = numarg + 1  if ~ arg10 eq rsi movrsi, arg10  end if end if if ~ arg9 eq  numarg = numarg + 1  if ~ arg9 eq r14 movr14, arg9  end if end if if ~ arg8 eq  numarg = numarg + 1  if ~ arg8 eq r13 movr13, arg8  end if end if if ~ arg7 eq  numarg = numarg + 1  if ~ arg7 eq r12 movr12, arg7  end if end if if ~ arg6 eq  numarg = numarg + 1  if ~ arg6 eq r11 movr11, arg6  end if end if if ~ arg5 eq  numarg = numarg + 1  if ~ arg5 eq r10 movr10, arg5  end if end if if ~ arg4 eq  numarg = numarg + 1  if ~ arg4 eq r9 movr9, arg4  end if end if if ~ arg3 eq  numarg = numarg + 1  if ~ arg3 eq r8 movr8, arg3  end if end if if ~ arg2 eq  numarg = numarg + 1  if ~ arg2 eq rdx movrdx, arg2  end if end if if ~ arg1 eq  numarg = numarg + 1  if ~ arg1 eq rcx   if ~ arg1 in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrcx, arg1   end if  end if end if xorrax, rax moval, numarg if interface in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrbx, [efi_ptr] movrbx, [rbx + EFI_SYSTEM_TABLE.#interface] else  if ~ interface eq rbx movrbx, interface  end if end if if arg1 in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrcx, rbx end if if defined SIMPLE_INPUT_INTERFACE.#function movrbx, [rbx + SIMPLE_INPUT_INTERFACE.#function] else  if defined SIMPLE_TEXT_OUTPUT_INTERFACE.#function movrbx, [rbx + SIMPLE_TEXT_OUTPUT_INTERFACE.#function]  else   if defined EFI_BOOT_SERVICES_TABLE.#function movrbx, [rbx + EFI_BOOT_SERVICES_TABLE.#function]   else    if defined EFI_RUNTIME_SERVICES_TABLE.#function movrbx, [rbx + EFI_RUNTIME_SERVICES_TABLE.#function]    else     if defined EFI_GRAPHICS_OUTPUT_PROTOCOL.#function movrbx, [rbx + EFI_GRAPHICS_OUTPUT_PROTOCOL.#function]     else      if defined EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.#function movrbx, [rbx + EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.#function]      else movrbx, [rbx + function]      end if     end if    end if   end if  end if end if calluefifunc }   section '.text' code executable readable   uefifunc: movqword [uefi_rsptmp], rsp andesp, 0FFFFFFF0h bteax, 0 jnc@f pushrax @@:cmpal, 11 jb@f pushrdi @@:cmpal, 10 jb@f pushrsi @@:cmpal, 9 jb@f pushr14 @@:cmpal, 8 jb@f pushr13 @@:cmpal, 7 jb@f pushr12 @@:cmpal, 6 jb@f pushr11 @@:cmpal, 5 jb@f pushr10 @@: subrsp, 4*8 callrbx movrsp, qword [uefi_rsptmp] ret   section '.data' data readable writeable efi_handler:dq0 efi_ptr:dq0 uefi_rsptmp:dq0 <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u043b\u0438\u0441\u0442\u0438\u043d\u0433 2<\/summary>\n<div class=\"spoiler__content\">\n<p>\u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u0443\u0441\u0442, \u043d\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0447\u043d\u0435\u0442 \u0440\u0430\u0441\u0442\u0438!<\/p>\n<pre><code class=\"assembly\">if ~ defined __EFICODE__ __EFICODE__ EQU 0  end if<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u043b\u0438\u0441\u0442\u0438\u043d\u0433 3<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">if ~ defined __MACROEFI__ __MACROEFI__ EQU 0   ;; --- constants --- ;; true EQU 1 false EQU 0 null EQU 0 nl EQU 13,10 via EQU ,  ;; --- structures --- ;;  struc sString [value] { common if ~ value eq  . du value, null else . du null end if }  struc sStrbuf _len { if ~ len eq  .len dq _len*2 .val rw _len else .len dq 1024*2 .val rw 1024 end if }  struc sKey scan, utf { if ~ scan eq  .scancode dw scan else .scancode dw null end if if ~ utf eq  .unicode du utf else .unicode: end if du null }  ;; --- macros --- ;;  macro mEntry _ofs { format pe64 dll efi entry _ofs }  macro mInit { InitializeLib jnc @f mExit EFI_SUCCESS @@: }  macro mPrint _str {     if ~_str eq  uefi_call_wrapper ConOut, OutputString, ConOut, _str end if }  macro mPrintln _str { if ~ _str eq  mPrint _str end if mPrint _crlf }  macro mReturn [data] { if ~ data eq  forward push data end if common ret }  macro mInvoke func, [arg] { if ~ arg eq  reverse push arg end if call func }; vacuum example: mInvoke fSend via message  macro mEfidata { common mSect data __crlf sString nl __key_buf sKey null, null }  macro mScankey _key { if ~ _key eq  mov [_key], dword 0 @@: uefi_call_wrapper ConIn, ReadKeyStroke, ConIn, _key cmp dword [_key], 0 jz @b end if }  macro mExit status { if status eq  mov eax, EFI_SUCCESS else mov eax, status end if retn }  macro mSect name, type { if type eq data section '.#name' data readable writable else if type eq code section '.#name' code executable readable else if type eq text section '.#name' code executable readable else if type eq fixup section '.#name' fixups data discardable end if }  end if<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u0438&#8230; \u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c helloworld \u0434\u043b\u044f uefi \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u043e\u0438 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0438. \u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u0438 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c. \u0418\u043c\u0445\u043e, \u043f\u043e\u0434 Windows \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u043f\u0438\u0441\u0430\u043b\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435!<\/p>\n<pre><code class=\"assembly\">; \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u044b include \"include\/macroefi.inc\"  ; \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 mEntry main  ; \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043b\u0435 mEntry!) include \"include\/sysuefi.inc\"  ; \u0441\u0435\u043a\u0446\u0438\u044f '.text' code executable readable mSect text, code  ; \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f main:   ; \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0435\u043e\u0442\u0435\u043a\u0443     mInit     ; \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0445\u0435\u043b\u043e\u0432\u043e\u0440\u043b\u0434     mPrint hello     ; \u0430\u043d\u0430\u043b\u043e\u0433 _getch \u0438\u0437 msvcrt.dll,     ; \u0436\u0434\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 key     mScankey key     ; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 UEFI shell     ; \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u041e\u041a     mExit EFI_SUCCESS  ; \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430) include \"include\/libuefi.inc\"  ; \u0441\u0435\u043a\u0446\u0438\u044f '.bsdata' data readable writable mSect bsdata, data  ; utf-8 \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u0445\u0435\u043b\u043e\u0432\u043e\u0440\u043b\u0434\u0430 hello sString 'Hello UEFI World!'  ; \u044f\u0447\u0435\u0439\u043a\u0430 \u0434\u043b\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438 key sKey  ; \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u0421\u0415\u0413\u0414\u0410 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430 mEfidata <\/code><\/pre>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c?<\/h2>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 Makefile. \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 make build \u0438 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0444\u0430\u0439\u043b bootx64.efi. Makefile (\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043e\u0442 \u043f\u0435\u0440\u043b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u0442 \u043d\u0435\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u043b\u043e\u0441\u044c):<\/p>\n<pre><code class=\"perl\">build: fasm BOOTX64.asm image: build mkdir tmp mkdir tmp\/efi mkdir tmp\/efi\/boot cp BOOTX64.efi tmp\/efi\/boot\/BOOTX64.efi genisoimage -o .\/image.iso -V BACKUP -R -J .\/tmp rm tmp\/efi\/boot\/* rmdir tmp\/efi\/boot tmp\/efi tmp cls dump: build hd BOOTX64.efi<\/code><\/pre>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c?<\/h2>\n<p>\u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 FAT32 \u0432\u043b\u0435\u0448\u043a\u0443 \u0438\u043b\u0438 GPT \u0440\u0430\u0437\u0434\u0435\u043b, \u043a\u0438\u0434\u0430\u0435\u0442\u0435 \u0432 \/efi\/boot \u0444\u0430\u0439\u043b \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c bootx64.efi \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u041f\u041a. \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f \u0438 \u0442\u0430\u043c \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u0444\u0430\u0439\u043b\/\u0444\u043b\u0435\u0448\u043a\u0443\/\u0440\u0430\u0437\u0434\u0435\u043b. \u0433\u0440\u0443\u0437\u0438\u0442\u0435\u0441\u044c \u0441 \u043d\u0435\u0433\u043e \u0438 \u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443.<\/p>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0438\u0437\u043b\u043e\u0436\u0438\u043b \u0432\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 Secure boot \u043d\u0430\u0434 Legacy, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b helloworld-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a.<\/p>\n<h2>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/h2>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u043f\u0440\u043e\u0442\u0438\u0432 <strong>\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439<\/strong> \u043a\u0440\u0438\u0442\u0438\u043a\u0438. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044e \u0438\u0434\u0435\u0438 \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c. \u0412\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 <strong>\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c<\/strong> \u0441\u0441\u044b\u043b\u043a\u0430\u043c. <em>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435!<\/em><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <\/p>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div data-test-id=\"notice-content\" class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/680270\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0414\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             65%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0422\u043e\u0447\u043d\u043e \u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             13           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:65%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             15%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0414\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:15%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             10%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0421\u043a\u043e\u0440\u0435\u0435 \u0434\u0430, \u0447\u0435\u043c \u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             2           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:10%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             0%           <\/span> <span class=\"tm-article-poll__answer-label\">\u041d\u0435 \u0437\u043d\u0430\u044e<\/span> <span class=\"tm-article-poll__answer-votes\">             0           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:0%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             5%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0421\u043a\u043e\u0440\u0435\u0435 \u043d\u0435\u0442, \u0447\u0435\u043c \u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             1           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:5%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             0%           <\/span> <span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             0           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:0%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             5%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0422\u043e\u0447\u043d\u043e \u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             1           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:5%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 20 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 6 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.      <\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/680270\/\"> https:\/\/habr.com\/ru\/post\/680270\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f. \u041e\u043f\u0438\u0441\u0430\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Legacy MBR \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c (\u0431\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439) \u0438 \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c &#171;\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c&#187; \u044d\u0442\u0443 \u0441\u0435\u0440\u0438\u044e (\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u0435\u0439). \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 \u0430\u0432\u0433\u0443\u0441\u0442 2022 \u0433\u043e\u0434\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u041f\u041e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 (U)EFI-\u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<h2>\u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 &#8212; \u0432\u0441\u0435\u043c\u0443 \u0433\u043e\u043b\u043e\u0432\u0430!<\/h2>\n<p>\u041d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0443 \u0434\u0440\u0443\u0433\u0438\u0445  \u043b\u044e\u0434\u0435\u0439, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u0432\u043b\u044e\u0431\u043b\u0435\u043d \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b \u044f \u043d\u0430 \u043d\u0435\u0433\u043e, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0432 Python, \u0430 \u043d\u0435  \u0421 \u0438\u043b\u0438 \u0424\u043e\u0440\u0442\u0440\u0430\u043d. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f \u0431\u0443\u0434\u0443 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e &#8212; <a href=\"https:\/\/flatassembler.com\" rel=\"noopener noreferrer nofollow\">fasm<\/a>, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0435\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<h2>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435&#8230;<\/h2>\n<p>\u042f \u043d\u0430\u0437\u043e\u0432\u0443 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445: \u044d\u0442\u043e Legacy, \u0438\u043b\u0438 \u0436\u0435 MBR, \u0438 Secure, \u0438\u043b\u0438 \u0436\u0435 EFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438 \u043d\u0435 \u043d\u0430\u043f\u0443\u0442\u0430\u043b). \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043f\u0438\u0441\u0430\u043b \u0434\u0432\u0443\u0445-\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a: MBR \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e-\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 SSB (Second-Stage Bootloader, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a 2 \u0441\u0442\u0430\u0434\u0438\u0438). \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c EFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a.<\/p>\n<h2>\u041a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f UEFI-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438?<\/h2>\n<p>\u041d\u0443, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u043e\u0441 (\u0432\u0440\u043e\u0434\u0435 \u0441 F000:FFFF \u0438\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043c), \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 POST (Power On Self Test), \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u041e\u041a, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 (U)EFI. UEFI \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0449\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 (ntfs, brtfs, extFAT, FAT32, isofs, cdfs, ext2\/3\/4, \u0435\u0441\u0442\u044c \u0435\u0449\u0451, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e), \u0438\u0449\u0435\u0442 \u043d\u0430 \u043d\u0438\u0445 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0441\u0443 <code>\/EFI\/BOOT\/<\/code> \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u0442 <code>*.efi<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>bootX.efi<\/code> \u0433\u0434\u0435 \u0425 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a. \u0412 \u0446\u0435\u043b\u043e\u043c, \u044d\u0442\u043e \u0432\u0441\u0451. (\u0430\u0445, \u0434\u0430, \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b: UEFI32 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 <code>bootia32.efi<\/code> \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 UEFI64 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 <code>bootx64.efi<\/code> \u0432 \u0434\u043e\u043b\u0433\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435).<\/p>\n<h2>\u0427\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435 efi-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?<\/h2>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u044d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 PE (Portable Excutable, \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f Microsoft Windows, *.exe, *.msi, *.dll, *.sys), \u043e\u043d \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IDA!<\/p>\n<h2>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c!<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u043e\u0441\u0442\u043e exe-\u0448\u043d\u0438\u043a \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442. \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 format \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"assembly\">format PE64 DLL EFI<\/code><\/pre>\n<p>\u041f\u043e\u0442\u043e\u043c, \u0431\u0443\u0434\u0435\u0442 \u043d\u0443 \u043f\u0440\u044f\u043c \u041e\u0427\u0415\u041d\u042c (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u041f\u0420\u042f\u041c \u043e\u0447\u0435\u043d\u044c, \u043d\u043e \u0431\u0443\u0434\u0435\u0442) \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c efi-app \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u0441\u0432\u043e\u044e (\u043b\u0438\u0441\u0442\u0438\u043d\u0433 1, 2, 3).<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 1 (sysuefi.inc) &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0436\u0438\u0437\u043d\u044c \u043c\u0435\u0434\u043e\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 2 (libuefi.inc) &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 __, \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0432 \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 3<\/p>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 3 (macroefi.inc) &#8212; \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0430\u043c\u0438 1 \u0438 2, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a struct.inc, \u0433\u0443\u043b\u044f\u044e\u0449\u0435\u0439 \u043f\u043e \u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u043c. \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0430\u0445 \u044f \u0435\u0451 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0432\u043e\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442-\u0442\u0430\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443 \u043d\u0430\u0448\u0435\u0433\u043e &#171;\u043f\u0440\u043e\u0435\u043a\u0442\u0430&#187; (\u0440\u0438\u0441. 1)<\/p>\n<figure class=\"\"><figcaption>\u0440\u0438\u0441. 1: \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u043b\u0438\u0441\u0442\u0438\u043d\u0433 1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">; sysuefi.inc for fasm assembly ;  struc int8 {   align 1   . db ? } struc int16 {   align 2   . dw ?   align 1 } struc int32 {   align 4   . dd ?   align 1 } struc int64 {   align 8   . dq ?   align 1 } struc intn {   align 8   . dq ?   align 1 } struc dptr {   align 8   . dq ?   align 1 }   ;symbols   EFIERR = 0x8000000000000000 EFI_SUCCESS= 0 EFI_LOAD_ERROR= EFIERR or 1 EFI_INVALID_PARAMETER= EFIERR or 2 EFI_UNSUPPORTED = EFIERR or 3 EFI_BAD_BUFFER_SIZE= EFIERR or 4 EFI_BUFFER_TOO_SMALL= EFIERR or 5 EFI_NOT_READY= EFIERR or 6 EFI_DEVICE_ERROR= EFIERR or 7 EFI_WRITE_PROTECTED= EFIERR or 8 EFI_OUT_OF_RESOURCES= EFIERR or 9 EFI_VOLUME_CORRUPTED= EFIERR or 10 EFI_VOLUME_FULL = EFIERR or 11 EFI_NO_MEDIA= EFIERR or 12 EFI_MEDIA_CHANGED= EFIERR or 13 EFI_NOT_FOUND= EFIERR or 14 EFI_ACCESS_DENIED= EFIERR or 15 EFI_NO_RESPONSE = EFIERR or 16 EFI_NO_MAPPING= EFIERR or 17 EFI_TIMEOUT= EFIERR or 18 EFI_NOT_STARTED = EFIERR or 19 EFI_ALREADY_STARTED= EFIERR or 20 EFI_ABORTED= EFIERR or 21 EFI_ICMP_ERROR= EFIERR or 22 EFI_TFTP_ERROR= EFIERR or 23 EFI_PROTOCOL_ERROR= EFIERR or 24   macro structure name {   virtual at 0     name name   end virtual }   ;structureures EFI_SYSTEM_TABLE_SIGNATUREequ49h,42h,49h,20h,53h,59h,53h,54h struc EFI_TABLE_HEADER {  .Signature    int64  .Revision     int32  .HeaderSize   int32  .CRC32        int32  .Reserved     int32 } structure EFI_TABLE_HEADER   struc EFI_SYSTEM_TABLE {  .Hdr        EFI_TABLE_HEADER  .FirmwareVendor        dptr  .FirmwareRevision      int32  .ConsoleInHandle       dptr  .ConIn         dptr  .ConsoleOutHandle      dptr  .ConOut        dptr  .StandardErrorHandle   dptr  .StdErr        dptr  .RuntimeServices       dptr  .BootServices        dptr  .NumberOfTableEntries  intn  .ConfigurationTable    dptr } structure EFI_SYSTEM_TABLE   struc SIMPLE_TEXT_OUTPUT_INTERFACE {  .Reset     dptr  .OutputString    dptr  .TestString    dptr  .QueryMode    dptr  .SetMode    dptr  .SetAttribute    dptr  .ClearScreen    dptr  .SetCursorPosition dptr  .EnableCursor    dptr  .Mode    dptr } structure SIMPLE_TEXT_OUTPUT_INTERFACE   ;---include ends   struc SIMPLE_INPUT_INTERFACE {  .Resetdptr  .ReadKeyStrokedptr  .WaitForKeydptr } structure SIMPLE_INPUT_INTERFACE   struc EFI_BOOT_SERVICES_TABLE {  .Hdr       EFI_TABLE_HEADER  .RaisePrioritydptr  .RestorePrioritydptr  .AllocatePagesdptr  .FreePagesdptr  .GetMemoryMapdptr  .AllocatePooldptr  .FreePooldptr  .CreateEventdptr  .SetTimerdptr  .WaitForEventdptr  .SignalEventdptr  .CloseEventdptr  .CheckEventdptr  .InstallProtocolInterface dptr  .ReInstallProtocolInterface dptr  .UnInstallProtocolInterface dptr  .HandleProtocoldptr  .Voiddptr  .RegisterProtocolNotify dptr  .LocateHandledptr  .LocateDevicePathdptr  .InstallConfigurationTable dptr  .ImageLoaddptr  .ImageStartdptr  .Exitdptr  .ImageUnLoaddptr  .ExitBootServicesdptr  .GetNextMonotonicCountdptr  .Stalldptr  .SetWatchdogTimerdptr  .ConnectControllerdptr  .DisConnectControllerdptr  .OpenProtocoldptr  .CloseProtocoldptr  .OpenProtocolInformation dptr  .ProtocolsPerHandledptr  .LocateHandleBufferdptr  .LocateProtocoldptr  .InstallMultipleProtocolInterfaces dptr  .UnInstallMultipleProtocolInterfaces dptr  .CalculateCrc32dptr  .CopyMemdptr  .SetMemdptr } structure EFI_BOOT_SERVICES_TABLE   struc EFI_RUNTIME_SERVICES_TABLE {  .Hdr       EFI_TABLE_HEADER  .GetTimedptr  .SetTimedptr  .GetWakeUpTimedptr  .SetWakeUpTimedptr  .SetVirtualAddressMapdptr  .ConvertPointerdptr  .GetVariabledptr  .GetNextVariableNamedptr  .SetVariabledptr  .GetNextHighMonoCountdptr  .ResetSystemdptr } structure EFI_RUNTIME_SERVICES_TABLE   struc EFI_TIME {  .Yearint16  .Monthint8  .Dayint8  .Hourint8  .Minuteint8  .Secondint8  .Pad1int8  .Nanosecondint32  .TimeZoneint16  .Daylightint8  .Pad2int8  .sizeofrb 1 } structure EFI_TIME   EFI_LOADED_IMAGE_PROTOCOL_UUID equ 0A1h,31h,1bh,5bh,62h,95h,0d2h,11h,8Eh,3Fh,0h,0A0h,0C9h,69h,72h,3Bh struc EFI_LOADED_IMAGE_PROTOCOL {  .Revisionint32  .ParentHandleint64  .SystemTabledptr  .DeviceHandleint64  .FilePathdptr  .Reservedint64  .LoadOptionsSizeint32  .ImageBasedptr  .ImageSizeint64  .ImageCodeTypeint32  .ImageDataTypeint32  .UnLoaddptr } structure EFI_LOADED_IMAGE_PROTOCOL   EFI_BLOCK_IO_PROTOCOL_UUID equ 21h,5bh,4eh,96h,59h,64h,0d2h,11h,8eh,39h,00h,0a0h,0c9h,69h,72h,3bh struc EFI_BLOCK_IO_PROTOCOL {  .Revisionint64  .Mediadptr  .Resetdptr  .ReadBlocksdptr  .WriteBlocksdptr  .FlushBlocksdptr } structure EFI_BLOCK_IO_PROTOCOL   struc EFI_BLOCK_IO_MEDIA {  .MediaIdint32  .RemovableMediaint8  .MediaPresentint8  .LogicalPartitionint8  .ReadOnlyint8  .WriteCachingint8  .BlockSizeint32  .IoAlignint32  .LastBlockint64 } structure EFI_BLOCK_IO_MEDIA   EFI_GRAPHICS_OUTPUT_PROTOCOL_UUID equ 0deh, 0a9h, 42h,90h,0dch,023h,38h,04ah,96h,0fbh,7ah,0deh,0d0h,80h,51h,6ah struc EFI_GRAPHICS_OUTPUT_PROTOCOL {  .QueryModedptr  .SetModedptr  .Bltdptr  .Modedptr } structure EFI_GRAPHICS_OUTPUT_PROTOCOL   struc EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE {  .MaxModeint32  .CurrentModeint32  .ModeInfodptr  .SizeOfModeInfointn  .FrameBufferBasedptr  .FrameBufferSizeintn } structure EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE   struc EFI_GRAPHICS_OUTPUT_MODE_INFORMATION {  .Versionint32  .HorizontalResolutionint32  .VerticalResolutionint32  .PixelFormatint32  .RedMaskint32  .GreenMaskint32  .BlueMaskint32  .Reservedint32  .PixelsPerScanlineint32 } structure EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  macro InitializeLib { clc orrdx, rdx jz.badout cmpdword [rdx], 20494249h je@f .badout:  xorrcx, rcx xorrdx, rdx stc @@:mov[efi_handler], rcx mov[efi_ptr], rdx }  macro uefi_call_wrapperinterface,function,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11 { numarg = 0 if ~ arg11 eq  numarg = numarg + 1  if ~ arg11 eq rdi movrdi, arg11  end if end if if ~ arg10 eq  numarg = numarg + 1  if ~ arg10 eq rsi movrsi, arg10  end if end if if ~ arg9 eq  numarg = numarg + 1  if ~ arg9 eq r14 movr14, arg9  end if end if if ~ arg8 eq  numarg = numarg + 1  if ~ arg8 eq r13 movr13, arg8  end if end if if ~ arg7 eq  numarg = numarg + 1  if ~ arg7 eq r12 movr12, arg7  end if end if if ~ arg6 eq  numarg = numarg + 1  if ~ arg6 eq r11 movr11, arg6  end if end if if ~ arg5 eq  numarg = numarg + 1  if ~ arg5 eq r10 movr10, arg5  end if end if if ~ arg4 eq  numarg = numarg + 1  if ~ arg4 eq r9 movr9, arg4  end if end if if ~ arg3 eq  numarg = numarg + 1  if ~ arg3 eq r8 movr8, arg3  end if end if if ~ arg2 eq  numarg = numarg + 1  if ~ arg2 eq rdx movrdx, arg2  end if end if if ~ arg1 eq  numarg = numarg + 1  if ~ arg1 eq rcx   if ~ arg1 in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrcx, arg1   end if  end if end if xorrax, rax moval, numarg if interface in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrbx, [efi_ptr] movrbx, [rbx + EFI_SYSTEM_TABLE.#interface] else  if ~ interface eq rbx movrbx, interface  end if end if if arg1 in &lt;ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> movrcx, rbx end if if defined SIMPLE_INPUT_INTERFACE.#function movrbx, [rbx + SIMPLE_INPUT_INTERFACE.#function] else  if defined SIMPLE_TEXT_OUTPUT_INTERFACE.#function movrbx, [rbx +<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-336423","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336423","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=336423"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336423\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}