{"id":202242,"date":"2013-11-15T13:37:03","date_gmt":"2013-11-15T09:37:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=202242"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=202242","title":{"rendered":"<span class=\"post_title\">\u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0417\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445-\u0442\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u041f\u041e?<\/p>\n<p>  \u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u0437\u0430\u0447\u0435\u043c?<br \/>  \u041d\u0443 \u043a\u0430\u043a \u0436\u0435, \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f 2-3 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u2013 \u044d\u0442\u043e \u0432\u0430\u0448 \u043b\u0438\u043c\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f AWE \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435, \u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u0441\u0435 \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041d\u043e \u0434\u0430\u0436\u0435 \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f\u2026<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0418 \u0445\u043e\u0442\u044f \u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0432\u043e\u0442 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u2013 \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435\u2026<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u0440\u0438 \u0440\u0435\u0432\u0435\u0440\u0441\u0435):<\/p>\n<p>  1. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u0430\u043a \u0438 \u0432 MS VC++).<br \/>  2. \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 (PEB\/TEB\/SEHChain\/Unwind\/\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 PE-\u0444\u0430\u0439\u043b\u043e\u0432 etc&#8230;) \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0430\u0437\u043c\u0430\u043f\u043b\u0435\u043d\u044b \u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u0438\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<br \/>  3. \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c). \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u043f\u043e\u0441\u0438\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0434\u0432\u0430 \u0441\u043d\u0438\u043c\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0442\u0443\u0442 \u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0442?<\/p>\n<p>  \u0414\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u0431\u0435\u0437 \u043b\u0438\u0440\u0438\u043a\u0438, \u0443\u0442\u0438\u043b\u0438\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e.<\/p>\n<p>  \u0421\u0430\u043c\u0430\u044f \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442 OllyDebug 2, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043d\u0430 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64 \u0431\u0438\u0442\u0430\u043c (\u0432\u0441\u0435 \u0435\u0449\u0435 \u0436\u0434\u0435\u043c).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/e3e\/26e\/cd7\/e3e26ecd76d448f16cf218ecfd044e47.png\"\/><\/div>\n<p>  VMMap \u043e\u0442 \u041c\u0430\u0440\u043a\u0430 \u0420\u0443\u0441\u0441\u0438\u043d\u043e\u0432\u0438\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0447\u0438\u0441\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0434\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0434\u0430 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e Microsoft, \u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0430\u0442\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/7c5\/cc5\/c96\/7c5cc5c961099124ec1d9e8ba7f508a3.png\"\/><\/div>\n<p>  ProcessHacker \u2013 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u043e \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/d5d\/a61\/105\/d5da61105cf2c23ac43c7883ecec21eb.png\"\/><\/div>\n<p>  \u041d\u0443 \u0430 \u043a \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 IDA Pro \u0437\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u043a (\u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e) \ud83d\ude42<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0445 \u043b\u043e\u0433\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043c\u043f\u043e\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u0439 \u0432 EurekaLog.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043f\u043e \u0448\u0430\u0433\u0430\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h4>1. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432<\/h4>\n<p>  \u0412\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<br \/>  \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 (4096 \u0431\u0430\u0439\u0442) \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435. (<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa366543(VS.85).aspx\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 MSDN<\/a>)<br \/>  \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0434\u0443\u0449\u0438\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b.<\/p>\n<p>  \u0427\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d?<br \/>  \u0413\u0440\u0443\u0431\u043e (<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa366775(v=vs.85).aspx\">\u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 MSDN<\/a>) \u2013 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 VirtualQuery \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">program Project1;  {$APPTYPE CONSOLE}  {$R *.res}  uses   Windows,   SysUtils;  var   MBI: TMemoryBasicInformation;   dwLength: NativeUInt;   Address: PByte; begin   Address := nil;   dwLength := SizeOf(TMemoryBasicInformation);   while VirtualQuery(Address, MBI, dwLength) &lt;&gt; 0 do   begin     Writeln(       'AllocationBase: ', IntToHex(NativeUInt(MBI.AllocationBase), 8),       ', BaseAddress: ', IntToHex(NativeUInt(MBI.BaseAddress), 8),       ', RegionSize: ', MBI.RegionSize);     Inc(Address, MBI.RegionSize);   end;   Readln; end. <\/code><\/pre>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0430\u0434\u0440\u0435\u0441 nil. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f MBI \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>BaseAddress = nil<\/li>\n<li>AllocationBase = nil<\/li>\n<li>AllocationProtect = 0<\/li>\n<li>RegionSize = $10000<\/li>\n<li>State = $10000<\/li>\n<li>Protect = 1<\/li>\n<li>Type_9 = 0<\/li>\n<\/ul>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0440\u0430\u0432\u0435\u043d $10000 (64 \u043a\u0431), \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 16 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c, \u0438\u0434\u0443\u0449\u0438\u043c \u043f\u043e\u0434\u0440\u044f\u0434, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u043e\u043b\u044c, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 (State) \u0440\u0430\u0432\u043d\u043e MEM_FREE ($10000) \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0437\u0430\u0449\u0438\u0442\u044b PAGE_NO_ACCESS (1) \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 Protect.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function ExtractAccessString(const Value: DWORD): string; const   PAGE_WRITECOMBINE = $400; begin   Result := 'Unknown access';   if (Value and PAGE_EXECUTE) = PAGE_EXECUTE then Result := 'E';   if (Value and PAGE_EXECUTE_READ) = PAGE_EXECUTE_READ then Result := 'RE';   if (Value and PAGE_EXECUTE_READWRITE) = PAGE_EXECUTE_READWRITE then      Result := 'RWE';   if (Value and PAGE_EXECUTE_WRITECOPY) = PAGE_EXECUTE_WRITECOPY then     Result := 'RE, Write copy';   if (Value and PAGE_NOACCESS) = PAGE_NOACCESS then Result := 'No access';   if (Value and PAGE_READONLY) = PAGE_READONLY then Result := 'R';   if (Value and PAGE_READWRITE) = PAGE_READWRITE then Result := 'RW';   if (Value and PAGE_WRITECOPY) = PAGE_WRITECOPY then Result := 'Write copy';   if (Value and PAGE_GUARD) = PAGE_GUARD then     Result := Result + ', Guarded';   if (Value and PAGE_NOCACHE) = PAGE_NOCACHE then     Result := Result + ', No cache';   if (Value and PAGE_WRITECOMBINE) = PAGE_WRITECOMBINE then     Result := Result + ', Write Combine'; end;  function ExtractRegionTypeString(Value: TMemoryBasicInformation): string; begin   Result := '';   case Value.State of     MEM_FREE: Result := 'Free';     MEM_RESERVE: Result := 'Reserved';     MEM_COMMIT:     case Value.Type_9 of       MEM_IMAGE: Result := 'Image';       MEM_MAPPED: Result := 'Mapped';       MEM_PRIVATE: Result := 'Private';     end;   end;   Result := Result + ', ' + ExtractAccessString(Value.Protect); end;  var   MBI: TMemoryBasicInformation;   dwLength: NativeUInt;   Address: PByte; begin   Address := nil;   dwLength := SizeOf(TMemoryBasicInformation);   while VirtualQuery(Address, MBI, dwLength) &lt;&gt; 0 do   begin     Writeln(       'AllocationBase: ', IntToHex(NativeUInt(MBI.AllocationBase), 8),       ', BaseAddress: ', IntToHex(NativeUInt(MBI.BaseAddress), 8),       ' - ', ExtractRegionTypeString(MBI));     Inc(Address, MBI.RegionSize);   end; <\/code><\/pre>\n<p>  \u2026 \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 VirtualAlloc:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/d61\/e94\/1f1\/d61e941f186b767741262f621096ce70.png\"\/><\/div>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 (\u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u044c), \u043d\u043e \u0440\u0430\u0437\u043d\u0430\u044f AllocationBase. AllocationBase \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0440\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c VirtualAlloc, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u0438\u0445 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d.<\/p>\n<h4>2. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445<\/h4>\n<p>  \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043d\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442, \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u043d\u0438\u0442\u0435\u0439 \u2013 \u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u0435\u0435).<\/p>\n<p>  \u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2013 \u0447\u0435\u0440\u0435\u0437 CreateToolhelp32Snapshot.<\/p>\n<pre><code class=\"delphi\">const   THREAD_GET_CONTEXT = 8;   THREAD_SUSPEND_RESUME = 2;   THREAD_QUERY_INFORMATION = $40;   ThreadBasicInformation = 0;   ThreadQuerySetWin32StartAddress = 9;   STATUS_SUCCESS = 0; var   hSnap, hThread: THandle;   ThreadEntry: TThreadEntry32;   TBI: TThreadBasicInformation;   TIB: NT_TIB;   lpNumberOfBytesRead: NativeUInt;   ThreadStartAddress: Pointer; begin    \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043d\u0438\u043c\u043e\u043a \u043d\u0438\u0442\u0435\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435   hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, GetCurrentProcessId);   if hSnap &lt;&gt; INVALID_HANDLE_VALUE then   try     ThreadEntry.dwSize := SizeOf(TThreadEntry32);     if Thread32First(hSnap, ThreadEntry) then     repeat       if ThreadEntry.th32OwnerProcessID &lt;&gt; GetCurrentProcessId then Continue;        Writeln('ThreadID: ', ThreadEntry.th32ThreadID);        \/\/ \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0438\u0442\u044c       hThread := OpenThread(THREAD_GET_CONTEXT or         THREAD_SUSPEND_RESUME or THREAD_QUERY_INFORMATION,         False, ThreadEntry.th32ThreadID);       if hThread &lt;&gt; 0 then       try         \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 ThreadProc()         if NtQueryInformationThread(hThread, ThreadQuerySetWin32StartAddress,           @ThreadStartAddress, SizeOf(ThreadStartAddress), nil) = STATUS_SUCCESS then           Writeln('ThreadProcAddr: ', IntToHex(NativeUInt(ThreadStartAddress), 1));          \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043d\u0438\u0442\u0438         if NtQueryInformationThread(hThread, ThreadBasicInformation, @TBI,           SizeOf(TThreadBasicInformation), nil) = STATUS_SUCCESS then         begin            Writeln('Thread Environment Block (TEB) Addr: ',             IntToHex(NativeUInt(TBI.TebBaseAddress), 1));            \/\/ \u0427\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430           \/\/ TIB (Thread Information Block) \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043d\u0438\u0442\u0438           if ReadProcessMemory(GetCurrentProcess,             TBI.TebBaseAddress, @TIB, SizeOf(NT_TIB),             lpNumberOfBytesRead) then           begin             Writeln('Thread StackBase Addr: ',               IntToHex(NativeUInt(TIB.StackBase), 1));             Writeln('Thread StackLimit Addr: ',               IntToHex(NativeUInt(TIB.StackLimit), 1));           end;          end;        finally         CloseHandle(hThread);       end;     until not Thread32Next(hSnap, ThreadEntry);   finally      CloseHandle(hSnap);   end;   Readln; end. <\/code><\/pre>\n<p>  \u041f\u043e \u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 CreateToolhelp32Snapshot\/Thread32First\/Thread32Next \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0445\u0435\u043d\u0434\u043b \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 OpenThread.<\/li>\n<li>\u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 NtQueryInformationThread \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043f\u043e\u0442\u043e\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443, \u0438 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0442\u043e\u043a\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TThreadBasicInformation.<\/li>\n<li>\u0418\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 \u2013 TebBaseAddress, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0431\u043b\u043e\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430, \u0442.\u043d. TEB (Thread Environment Block).<\/li>\n<li>\u041f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 ReadProcessMemory (\u0445\u043e\u0442\u044f \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e) \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 TEB, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 NT_TIB.<\/li>\n<\/ol>\n<p>  \u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f NT_TIB \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">  PNT_TIB = ^_NT_TIB;   _NT_TIB = record     ExceptionList: Pointer;     StackBase,     StackLimit,     SubSystemTib: Pointer;     case Integer of       0: (         FiberData: Pointer         );       1: (         Version: ULONG;         ArbitraryUserPointer: Pointer;         Self: PNT_TIB;         )   end;   NT_TIB = _NT_TIB;   PPNT_TIB = ^PNT_TIB; <\/code><\/pre>\n<p>  \u041d\u0443 \u0438\u043b\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a, \u0435\u0441\u043b\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<ul>\n<li>ExceptionList \u2013 \u0432 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e SEH \u0444\u0440\u0435\u0439\u043c\u0430 (\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 EXCEPTION_REGISTRATION). \u041e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 SEH \u0444\u0440\u0435\u0439\u043c\u043e\u0432.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0436\u0435 TEB \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0432 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u0435 ExceptionList \u0441\u0432\u043e\u0435\u0433\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430.<\/li>\n<li>\u0412 64-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u043d\u0438\u043b\u0435\u043d\u043e, \u0442.\u043a. \u0434\u043b\u044f 64 \u0431\u0438\u0442 \u0432\u0437\u0430\u043c\u0435\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 SEH \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c.<\/li>\n<li>StackBase \u2013 \u0431\u0430\u0437\u0430 \u0441\u0442\u0435\u043a\u0430. \u0410\u0434\u0440\u0435\u0441 \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0435\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 StackLimit.<\/li>\n<li>StackLimit \u2013 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0430 \u0441\u0442\u0435\u043a\u0430.<\/li>\n<li>ArbitraryUserPointer \u2013 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e TLS \u0441\u043b\u043e\u0442\u0430. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0430\u044f \u043f\u043e\u0442\u043e\u043a\u0443, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u0434.<\/li>\n<li>Self \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 TEB (\u0442.\u0435. \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f)<\/li>\n<\/ul>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p>  \u041d\u0443, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043a\u0430\u043a \u2013 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b?<br \/>  \u041d\u0443\u0436\u043d\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b.<br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u043e\u0442 \u0441\u0441\u044b\u043b\u043a\u0430, \u0433\u0434\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: Thread Environment Block.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/cd7\/1b0\/d44\/cd71b0d444f5a4142aab32c557b8a0a5.png\"\/><\/div>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u0432 VMMap.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/bbb\/b9e\/e42\/bbbb9ee42f261f938dec3ac28e16cd2b.png\"\/><\/div>\n<p>  \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e VMMap \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e TEB.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0437\u0430\u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 Delphi, \u0438\u0445 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 <a href=\"http:\/\/rouse.drkb.ru\/blog\/pmm2.zip\">\u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a>, \u0438\u0434\u0443\u0449\u0438\u0445 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 MSDN \ud83d\ude42<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 TEB \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0442\u043e \u043a\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ToolHelp32.dll, \u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 FS (\u0438\u043b\u0438 GS \u0434\u043b\u044f \u044564).<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 TEB:<\/p>\n<pre><code class=\"delphi\">function GetCurrentTEB: NativeUInt; asm {$IFDEF WIN64}   \/\/ mov RAX, qword ptr GS:[30h]   \/\/ \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0448\u043a\u043e\u0434\u044b, \u0432\u0432\u0438\u0434\u0443 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 64-\u0431\u0438\u0442\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c   DB $65, $48, $8B, $04, $25, $30, 0, 0, 0   \/\/ \u043d\u0443 \u043b\u0438\u0431\u043e \u0432\u043e\u0442 \u0442\u0430\u043a, \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e   mov RAX, qword ptr GS:[abs $30] {$ELSE}   mov EAX, FS:[18h] {$ENDIF} end; <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 NtTIB.Self \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TEB, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0x18 (\u0438\u043b\u0438 0x30 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e TEB) \u043e\u0442 \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u0430.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c\u2026<br \/>  \u0427\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043d\u0430\u043c.<\/p>\n<p>  \u041d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b SEH \u0444\u0440\u0435\u0439\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0431\u043b\u043e\u043a try..finally\/except, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440. \u0411\u044b\u043b\u043e \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u2013 \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0440\u0435\u0433\u0438\u043e\u043d\u0443.<\/p>\n<p>  \u0420\u0430\u0441\u043a\u0440\u0443\u0442\u043a\u043e\u0439 SEH \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430:<\/p>\n<pre><code class=\"delphi\">procedure GetThreadSEHFrames(InitialAddr: Pointer); type   EXCEPTION_REGISTRATION = record     prev, handler: Pointer;   end; var   ER: EXCEPTION_REGISTRATION;   lpNumberOfBytesRead: NativeUInt; begin   while ReadProcessMemory(GetCurrentProcess, InitialAddr, @ER,     SizeOf(EXCEPTION_REGISTRATION), lpNumberOfBytesRead) do   begin     Writeln('SEH Frame at Addr: ',       IntToHex(NativeUInt(InitialAddr), 1), ', handler at addr: ',       IntToHex(NativeUInt(ER.handler), 1));     InitialAddr := ER.prev;     if DWORD(InitialAddr) &lt;= 0 then Break;   end; end; <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 TEB.TIB.ExceptionList, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 EXCEPTION_REGISTRATION, \u043e\u043d\u0430 \u0431\u0435\u0436\u0438\u0442 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 prev \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b EXCEPTION_REGISTRATION. \u0410 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 handler \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442.<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/cd7\/1b0\/d44\/cd71b0d444f5a4142aab32c557b8a0a5.png\"\/><\/div>\n<p>  \u041d\u0443 \u0430 CallStack \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430:<\/p>\n<pre><code class=\"delphi\">procedure GetThreadCallStack(hThread: THandle); var   StackFrame: TStackFrame;   ThreadContext: PContext;   MachineType: DWORD; begin   \/\/ ThreadContext \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c VirtualAlloc   \/\/ \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u0443\u044e \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b   \/\/ \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c ERROR_NOACCESS (998)   ThreadContext := VirtualAlloc(nil, SizeOf(TContext), MEM_COMMIT, PAGE_READWRITE);   try     ThreadContext^.ContextFlags := CONTEXT_FULL;     if not GetThreadContext(hThread, ThreadContext^) then       Exit;      ZeroMemory(@StackFrame, SizeOf(TStackFrame));     StackFrame.AddrPC.Mode := AddrModeFlat;     StackFrame.AddrStack.Mode := AddrModeFlat;     StackFrame.AddrFrame.Mode := AddrModeFlat;     StackFrame.AddrPC.Offset := ThreadContext.Eip;     StackFrame.AddrStack.Offset := ThreadContext.Esp;     StackFrame.AddrFrame.Offset := ThreadContext.Ebp;     MachineType := IMAGE_FILE_MACHINE_I386;      while True do     begin       if not StackWalk(MachineType, GetCurrentProcess, hThread, @StackFrame,         ThreadContext, nil, nil, nil, nil) then         Break;       if StackFrame.AddrPC.Offset &lt;= 0 then Break;       Writeln('CallStack Frame Addr: ',         IntToHex(NativeUInt(StackFrame.AddrFrame.Offset), 1));       Writeln('CallStack Handler: ',         IntToHex(NativeUInt(StackFrame.AddrPC.Offset), 1));       Writeln('CallStack Stack: ',         IntToHex(NativeUInt(StackFrame.AddrStack.Offset), 1));       Writeln('CallStack Return: ',         IntToHex(NativeUInt(StackFrame.AddrReturn.Offset), 1));     end;    finally     VirtualFree(ThreadContext, SizeOf(TContext), MEM_FREE);   end; end; <\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 Delphi, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043d \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442.<br \/>  \u0417\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0430\u0445 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f StackWalk (\u0438\u043b\u0438 StackWalk64).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u044e\u0430\u043d\u0441: \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435, \u0442\u043e \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 (\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 <a href=\"http:\/\/rouse.drkb.ru\/blog\/pmm2.zip\">\u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/a>).<\/p>\n<p>  \u041f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u044d\u0442\u043e \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435: \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 StackWalk \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0441\u0442\u0435\u043a\u0430 (EBP \u0438 ESP\/ RBP \u0438 RSP \u0434\u043b\u044f \u044564) \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0434\u0430 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 EIP \u0438\u043b\u0438 RIP \u0434\u043b\u044f \u044564). \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e GetThreadContext, \u0430 \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0433\u0434\u0435 \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0442\u0430\u043d\u0443\u0442, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<br \/>  \u042d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u2026<\/p>\n<p>  \u041d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0434 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 \u0432\u043a\u043b\u044e\u0447\u0430\u044f 32 \u0438 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0437\u0436\u0435, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441\u2026<\/p>\n<h4>3. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u0443\u0447\u0430\u0445<\/h4>\n<p>  \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 Delphi \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u0443\u0447\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442, \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0440\u043e\u0433\u0430\u0442\u0438\u0432\u0430 \u0421++ \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043a\u0443\u0447\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0437\u0434\u0435\u0441\u044c. \u041e\u0431\u044b\u0447\u043d\u043e \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043d\u0443\u0436\u0434.<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043a\u0443\u0447\u0430\u0445 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 HeapEntry, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0436\u0434\u0430\u044f \u043a\u0443\u0447\u0430, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u044e\u0430\u043d\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f Heap32Next \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0435\u043a\u0443\u043d\u0434).<\/p>\n<p>  \u041e\u0431 \u044d\u0442\u043e\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/181588\/\">\u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b<\/a>.<br \/>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0432 \u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u0434 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f, \u0438 \u043d\u0430\u043c \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0447\u0435\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"delphi\">const   RTL_HEAP_BUSY = 1;   RTL_HEAP_SEGMENT = 2;   RTL_HEAP_SETTABLE_VALUE = $10;   RTL_HEAP_SETTABLE_FLAG1 = $20;   RTL_HEAP_SETTABLE_FLAG2 = $40;   RTL_HEAP_SETTABLE_FLAG3 = $80;   RTL_HEAP_SETTABLE_FLAGS = $E0;   RTL_HEAP_UNCOMMITTED_RANGE = $100;   RTL_HEAP_PROTECTED_ENTRY = $200;   RTL_HEAP_FIXED = (RTL_HEAP_BUSY or RTL_HEAP_SETTABLE_VALUE or     RTL_HEAP_SETTABLE_FLAG2 or RTL_HEAP_SETTABLE_FLAG3 or     RTL_HEAP_SETTABLE_FLAGS or RTL_HEAP_PROTECTED_ENTRY);   STATUS_SUCCESS = 0;    function CheckSmallBuff(Value: DWORD): Boolean;   const     STATUS_NO_MEMORY = $C0000017;     STATUS_BUFFER_TOO_SMALL = $C0000023;   begin     Result := (Value = STATUS_NO_MEMORY) or (Value = STATUS_BUFFER_TOO_SMALL);   end;    function FlagToStr(Value: DWORD): string;   begin     case Value of       LF32_FIXED: Result := 'LF32_FIXED';       LF32_FREE: Result := 'LF32_FREE';       LF32_MOVEABLE: Result := 'LF32_MOVEABLE';     else       Result := '';     end;   end;  var   I, A: Integer;   pDbgBuffer: PRtlDebugInformation;   pHeapInformation: PRtlHeapInformation;   pHeapEntry: PRtrHeapEntry;   dwAddr, dwLastSize: ULONG_PTR;   hit_seg_count: Integer;   BuffSize: NativeUInt; begin   \/\/ \u0422.\u043a. \u0441\u0432\u044f\u0437\u043a\u0430 Heap32ListFirst, Heap32ListNext, Heap32First, Heap32Next   \/\/ \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0438\u0437-\u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430   \/\/ RtlQueryProcessDebugInformation \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0435\u0435 \u0432\u044b\u0437\u043e\u0432   \/\/ \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0434\u0443\u0431\u043b\u044f\u0436\u0430   \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440   BuffSize := $400000;   pDbgBuffer := RtlCreateQueryDebugBuffer(BuffSize, False);   \/\/ \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043a\u0443\u0447 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430   while CheckSmallBuff(RtlQueryProcessDebugInformation(GetCurrentProcessId,     RTL_QUERY_PROCESS_HEAP_SUMMARY or RTL_QUERY_PROCESS_HEAP_ENTRIES,     pDbgBuffer)) do   begin     \/\/ \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c...     RtlDestroyQueryDebugBuffer(pDbgBuffer);     BuffSize := BuffSize shl 1;     pDbgBuffer := RtlCreateQueryDebugBuffer(BuffSize, False);   end;    if pDbgBuffer &lt;&gt; nil then   try     \/\/ \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043a\u0443\u0447 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430     if RtlQueryProcessDebugInformation(GetCurrentProcessId,       RTL_QUERY_PROCESS_HEAP_SUMMARY or RTL_QUERY_PROCESS_HEAP_ENTRIES,       pDbgBuffer) = STATUS_SUCCESS then     begin       \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u0443\u0447\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e       pHeapInformation := @pDbgBuffer^.Heaps^.Heaps[0];       \/\/ \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0435\u0435 \u0431\u043b\u043e\u043a\u0438...       for I := 0 to pDbgBuffer^.Heaps^.NumberOfHeaps - 1 do       begin          \/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e         pHeapEntry := pHeapInformation^.Entries;         dwAddr := DWORD(pHeapEntry^.u.s2.FirstBlock) +           pHeapInformation^.EntryOverhead;         dwLastSize := 0;          A := 0;         while A &lt; Integer(pHeapInformation^.NumberOfEntries) do         try           hit_seg_count := 0;            while (pHeapEntry^.Flags and RTL_HEAP_SEGMENT) = RTL_HEAP_SEGMENT do           begin             \/\/ \u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a \u043e\u0442\u043c\u0435\u0447\u0435\u043d \u0444\u043b\u0430\u0433\u043e\u043c RTL_HEAP_SEGMENT,             \/\/ \u0442\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 EntryOverhead             dwAddr := DWORD(pHeapEntry^.u.s2.FirstBlock) +               pHeapInformation^.EntryOverhead;             Inc(pHeapEntry);             Inc(A);             Inc(hit_seg_count);             \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u0445\u043e\u0434\u0430 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u043b\u043e\u043a\u043e\u0432             if A + hit_seg_count &gt;=               Integer(pHeapInformation^.NumberOfEntries - 1) then               Continue;           end;            \/\/ \u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435, \u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u043b\u043e\u043a\u0430 \u0440\u0430\u0432\u0435\u043d,           \/\/ \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 + \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430           if hit_seg_count = 0 then             Inc(dwAddr, dwLastSize);            \/\/ \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u043b\u0430\u0433\u0438           if pHeapEntry^.Flags and RTL_HEAP_FIXED &lt;&gt; 0 then             pHeapEntry^.Flags := LF32_FIXED           else             if pHeapEntry^.Flags and RTL_HEAP_SETTABLE_FLAG1 &lt;&gt; 0 then               pHeapEntry^.Flags := LF32_MOVEABLE             else               if pHeapEntry^.Flags and RTL_HEAP_UNCOMMITTED_RANGE &lt;&gt; 0 then                 pHeapEntry^.Flags := LF32_FREE;           if pHeapEntry^.Flags = 0 then             pHeapEntry^.Flags := LF32_FIXED;            \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435           Writeln('HeapID: ', I, ', entry addr: ', IntToHex(dwAddr, 8),             ', size: ', IntToHex(pHeapEntry^.Size, 8), ' ', FlagToStr(pHeapEntry^.Flags));           \/\/ \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430          dwLastSize := pHeapEntry^.Size;          \/\/ \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0431\u043b\u043e\u043a\u0443          Inc(pHeapEntry);         finally           Inc(A);         end;         \/\/ \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u0443\u0447\u0435         Inc(pHeapInformation);       end;     end;   finally     RtlDestroyQueryDebugBuffer(pDbgBuffer);   end;   Readln; end. <\/code><\/pre>\n<p>  \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 RtlQueryProcessDebugInformation, RtlCreateQueryDebugBuffer \u0438 RtlQueryProcessDebugInformation \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043a\u0443\u0447\u0430\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0437\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043d\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435.<br \/>  pDbgBuffer^.Heaps \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u0443\u0447 (\u0430\u043d\u0430\u043b\u043e\u0433 THeapList32), \u0430 \u0441\u0430\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 pDbgBuffer^.Heaps^.Heaps[N].Entries (\u0430\u043d\u0430\u043b\u043e\u0433 THeapEntry32).<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/bcb\/f1c\/6e0\/bcbf1c6e0d2dc852d20d651ec0241317.png\"\/><\/div>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043a\u0443\u0447\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h4>4. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 PE \u0444\u0430\u0439\u043b\u0430\u0445<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 PEB.LoaderData), \u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e\u0434 PE \u0444\u0430\u0439\u043b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d (\u043d\u0443, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044f \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f \u0441 \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b PE \u043e\u0431\u0440\u0430\u0437 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0431\u0435\u0437 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0437\u044f\u0432 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 PE \u0444\u0430\u0439\u043b\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e PE \u0444\u0430\u0439\u043b\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<pre><code class=\"delphi\">function CheckPEImage(hProcess: THandle;   ImageBase: Pointer; var IsPEImage64: Boolean): Boolean; var   ReturnLength: NativeUInt;   IDH: TImageDosHeader;   NT: TImageNtHeaders; begin   Result := False;   IsPEImage64 := False;   if not ReadProcessMemory(hProcess, ImageBase,     @IDH, SizeOf(TImageDosHeader), ReturnLength) then Exit;   if IDH.e_magic &lt;&gt; IMAGE_DOS_SIGNATURE then Exit;   ImageBase := Pointer(NativeInt(ImageBase) + IDH._lfanew);   if not ReadProcessMemory(hProcess, ImageBase,     @NT, SizeOf(TImageNtHeaders), ReturnLength) then Exit;   Result := NT.Signature = IMAGE_NT_SIGNATURE;   IsPEImage64 :=     (NT.FileHeader.Machine = IMAGE_FILE_MACHINE_IA64) or     (NT.FileHeader.Machine = IMAGE_FILE_MACHINE_ALPHA64) or     (NT.FileHeader.Machine = IMAGE_FILE_MACHINE_AMD64); end; <\/code><\/pre>\n<p>  \u041d\u0443 \u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u0430\u043a, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 ImageDosHeader \u0438 ImageNTHeader, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u043b\u044f 99% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  \u0422\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439, \u043e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 PE \u0444\u0430\u0439\u043b 64-\u0431\u0438\u0442\u043d\u044b\u043c.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetMappedFileName:<\/p>\n<pre><code class=\"delphi\">function GetFileAtAddr(hProcess: THandle; ImageBase: Pointer): string; begin   SetLength(Result, MAX_PATH);   SetLength(Result,     GetMappedFileName(hProcess, ImageBase, @Result[1], MAX_PATH)); end; <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"delphi\">var   MBI: TMemoryBasicInformation;   dwLength: NativeUInt;   Address: PByte;   IsPEImage64: Boolean; begin   Address := nil;   dwLength := SizeOf(TMemoryBasicInformation);   while VirtualQuery(Address, MBI, dwLength) &lt;&gt; 0 do   begin     if CheckPEImage(GetCurrentProcess, MBI.BaseAddress, IsPEImage64) then     begin       Write(IntToHex(NativeUInt(MBI.BaseAddress), 8), ': ',         GetFileAtAddr(GetCurrentProcess, MBI.BaseAddress));       if IsPEImage64 then         Writeln(' (x64)')       else         Writeln(' (x32)');     end;     Inc(Address, MBI.RegionSize);   end;   Readln; end. <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/1ca\/cd4\/36d\/1cacd436dcf75fac7d1bacfbd959c626.png\"\/><\/div>\n<p>  64-\u0431\u0438\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438? \u0414\u0430 \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \ud83d\ude42<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443 \u043c\u0435\u043d\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0435, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Windows 7 x64. \u0421\u0443\u0434\u044f \u043f\u043e \u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u0432 \u043d\u0430\u0448\u0435\u043c 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0436\u0438\u0432\u0443\u0442 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0442\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u2014 \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Wow64 (<a href=\"http:\/\/modernlib.ru\/books\/russinovich_mark\/1vnutrennee_ustroystvo_windows_gl_14\/read_14\/\">\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f Win32 \u0432 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439 Windows<\/a>).<\/p>\n<p>  \u0417\u0430\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u043a\u0443\u0447.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0435\u043a\u0446\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e PE \u0444\u0430\u0439\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e. \u0412\u0441\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure GetInfoFromImage(const FileName: string; ImageBase: Pointer); var   ImageInfo: TLoadedImage;   ImageSectionHeader: PImageSectionHeader;   I: Integer; begin   if MapAndLoad(PAnsiChar(AnsiString(FileName)), nil, @ImageInfo, True, True) then   try     ImageSectionHeader := ImageInfo.Sections;     for I := 0 to Integer(ImageInfo.NumberOfSections) - 1 do     begin       Write(         IntToHex((NativeUInt(ImageBase) + ImageSectionHeader^.VirtualAddress), 8), ': ',         string(PAnsiChar(@ImageSectionHeader^.Name[0])));       if IsExecute(ImageSectionHeader^.Characteristics) then         Write(' Execute');       if IsWrite(ImageSectionHeader^.Characteristics) then         Write(' Writable');       Writeln;       Inc(ImageSectionHeader);     end;   finally     UnMapAndLoad(@ImageInfo);   end;   Writeln; end; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 MapAndLoad, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043f\u043e\u043c\u0438\u043c\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 NtMapViewOfSection.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b\u0437\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d, \u0442.\u043a. \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 PE \u0444\u0430\u0439\u043b \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u043e \u0442.\u043a. \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c.<\/p>\n<p>  MapAndLoad \u0445\u043e\u0440\u043e\u0448\u0430 \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 64-\u0431\u0438\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u0435 PE \u0444\u0430\u0439\u043b\u044b (\u043f\u0440\u0430\u0432\u0434\u0430, \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432), \u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0421\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u0442\u0430\u043a\u043e\u0432\u0430: \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f MapAndLoad \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 TLoadedImage, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Sections \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 TImageSectionHeader. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 VirtualAddress, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0421\u043b\u043e\u0436\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0441 hInstance \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 IsExecute \u0438 IsWrite \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 True \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0441\u0435\u043a\u0446\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 (IsExecute) \u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 (IsWrite). \u0412\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u043d\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function IsExecute(const Value: DWORD): Boolean; begin   Result := False;   if (Value and IMAGE_SCN_CNT_CODE) =     IMAGE_SCN_CNT_CODE then Result := True;   if (Value and IMAGE_SCN_MEM_EXECUTE) =     IMAGE_SCN_MEM_EXECUTE then Result := True; end;  function IsWrite(const Value: DWORD): Boolean; begin   Result := False;   if (Value and IMAGE_SCN_CNT_UNINITIALIZED_DATA) =     IMAGE_SCN_CNT_UNINITIALIZED_DATA then Result := True;   if (Value and IMAGE_SCN_MEM_WRITE) = IMAGE_SCN_MEM_WRITE then     Result := True; end; <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/54d\/4b6\/afe\/54d4b6afebc0f1d62cda12194cecbb5e.png\"\/><\/div>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u044e\u0430\u043d\u0441.<br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044f GetMappedFileName \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u0438\u0434\u0435: &quot;\\Device\\HarddiskVolume2\\Windows\\System32\\wow64cpu.dll&quot;, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f MapAndLoad \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0432\u0438\u0434\u0430 \u00abC:\\Windows\\System32\\wow64cpu.dll\u00bb.<\/p>\n<p>  \u0417\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u043a \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">function NormalizePath(const Value: string): string; const   OBJ_CASE_INSENSITIVE         = $00000040;   STATUS_SUCCESS               = 0;   FILE_SYNCHRONOUS_IO_NONALERT = $00000020;   FILE_READ_DATA = 1;   ObjectNameInformation = 1;   DriveNameSize = 4;   VolumeCount = 26;   DriveTotalSize = DriveNameSize * VolumeCount; var   US: UNICODE_STRING;   OA: OBJECT_ATTRIBUTES;   IO: IO_STATUS_BLOCK;   hFile: THandle;   NTSTAT, dwReturn: DWORD;   ObjectNameInfo: TOBJECT_NAME_INFORMATION;   Buff, Volume: string;   I, Count, dwQueryLength: Integer;   lpQuery: array [0..MAX_PATH - 1] of Char;   AnsiResult: AnsiString; begin   Result := Value;   \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 ZwOpenFile   RtlInitUnicodeString(@US, StringToOleStr(Value));   \/\/ \u0410\u043d\u0430\u043b\u043e\u0433 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 InitializeObjectAttributes   FillChar(OA, SizeOf(OBJECT_ATTRIBUTES), #0);   OA.Length := SizeOf(OBJECT_ATTRIBUTES);   OA.ObjectName := @US;   OA.Attributes := OBJ_CASE_INSENSITIVE;   \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f ZwOpenFile \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u043f\u0443\u0442\u044c \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d   \/\/ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:   \/\/ \\SystemRoot\\System32\\ntdll.dll   \/\/ \\??\\C:\\Windows\\System32\\ntdll.dll   \/\/ \\Device\\HarddiskVolume1\\WINDOWS\\system32\\ntdll.dll   \/\/ \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0445\u0435\u043d\u0434\u043b\u0430   NTSTAT := ZwOpenFile(@hFile, FILE_READ_DATA or SYNCHRONIZE, @OA, @IO,     FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,     FILE_SYNCHRONOUS_IO_NONALERT);   if NTSTAT = STATUS_SUCCESS then   try     \/\/ \u0424\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u044b\u0442, \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c     NTSTAT := NtQueryObject(hFile, ObjectNameInformation,       @ObjectNameInfo, MAX_PATH * 2, @dwReturn);     if NTSTAT = STATUS_SUCCESS then     begin       SetLength(AnsiResult, MAX_PATH);       WideCharToMultiByte(CP_ACP, 0,         @ObjectNameInfo.Name.Buffer[ObjectNameInfo.Name.MaximumLength -         ObjectNameInfo.Name.Length {$IFDEF WIN64} + 4{$ENDIF}],         ObjectNameInfo.Name.Length, @AnsiResult[1],         MAX_PATH, nil, nil);       Result := string(PAnsiChar(AnsiResult));       \/\/ \u041f\u0443\u0442\u044c \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 ZwOpenFile \u0444\u0430\u0439\u043b       \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \\Device\\HarddiskVolume\u0425\\\u0431\u043b\u0430-\u0431\u043b\u0430       \/\/ \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u0438\u0441\u043a\u043e\u043c       SetLength(Buff, DriveTotalSize);       Count := GetLogicalDriveStrings(DriveTotalSize, @Buff[1]) div DriveNameSize;       for I := 0 to Count - 1 do       begin         Volume := PChar(@Buff[(I * DriveNameSize) + 1]);         Volume[3] := #0;         \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u043c\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0438         \/\/ \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c         QueryDosDevice(PChar(Volume), @lpQuery[0], MAX_PATH);         dwQueryLength := Length(string(lpQuery));         if Copy(Result, 1, dwQueryLength) = string(lpQuery) then         begin           Volume[3] := '\\';           if lpQuery[dwQueryLength - 1] &lt;&gt; '\\' then             Inc(dwQueryLength);           Delete(Result, 1, dwQueryLength);           Result := Volume + Result;           Break;         end;       end;     end;   finally     ZwClose(hFile);   end; end; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438. \u0421\u0443\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u0438\u0437 \u043f\u0443\u0442\u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0438\u0434\u043e\u0432:<\/p>\n<ul>\n<li>\\SystemRoot\\System32\\ntdll.dll<\/li>\n<li>\\??\\C:\\Windows\\System32\\ntdll.dll<\/li>\n<li>\\Device\\HarddiskVolume1\\WINDOWS\\system32\\ntdll.dll<\/li>\n<\/ul>\n<p>  \u2026 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 &quot;\\Device\\HarddiskVolume1\\WINDOWS\\system32\\ntdll.dll&quot;.<br \/>  \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 ZwOpenFile + NtQueryObject, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f QueryDosDevice, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0443\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 (\u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438) \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043c\u0435\u0442\u043a\u0430 \u0434\u0438\u0441\u043a\u0430.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0440\u0438\u043a\u0430.<br \/>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043e\u0431\u043e\u0439, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 PE \u0444\u0430\u0439\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0441\u0440\u0430\u0437\u0443, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0433\u0434\u0435 \u0441\u0438\u0434\u0438\u0442 UNWIND \u0438 \u0442.\u043f.<\/p>\n<p>  \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure EnumDirectoryes(ImageBase: Pointer; ImageInfo: TLoadedImage;   AddrStart, AddrEnd: NativeUInt); const   DirectoryStr: array [0..14] of string =     ('export', 'import', 'resource', 'exception',     'security', 'basereloc', 'debug', 'copyright',     'globalptr', 'tls', 'load_config', 'bound_import',     'iat', 'delay_import', 'com'); var   I: Integer;   dwDirSize: DWORD;   DirAddr: Pointer;   ReadlDirAddr: NativeUInt; begin   for I := 0 to 14 do   begin     DirAddr := ImageDirectoryEntryToData(ImageInfo.MappedAddress,       True, I, dwDirSize);     if DirAddr = nil then Continue;         ReadlDirAddr := NativeUint(ImageBase) +         NativeUint(DirAddr) - NativeUint(ImageInfo.MappedAddress);     if (ReadlDirAddr &gt;= AddrStart) and (ReadlDirAddr &lt; AddrEnd) then       Writeln(         IntToHex(ReadlDirAddr, 8), ': directory &quot;', DirectoryStr[I], '&quot;');   end; end; <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 TLoadedImage, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ImageDirectoryEntryToData \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0451 \u0430\u0434\u0440\u0435\u0441, \u043f\u0440\u0430\u0432\u0434\u0430, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d PE \u0444\u0430\u0439\u043b. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u0443\u0436\u043d\u043e \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0437, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430, \u0438 \u0443\u0436\u0435 \u0435\u0433\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0441 ImageBase \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/3d0\/e35\/98c\/3d0e3598c05886055d5be943c9f82b28.png\"\/><\/div>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 &quot;.text&quot; \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 msctf.dll \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\/\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438 \u0442.\u043f.<br \/>  \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0441\u0438\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 &quot;.rsrc&quot;, \u0434\u0430 \u0438 \u0440\u0435\u043b\u043e\u043a\u0438 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0433\u0434\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437 \u0441\u0445\u0435\u043c\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u00abbound_import\u00bb.<\/p>\n<p>  \u0414\u0430, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u0430\u043d\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0430\u043a\u043e\u0432\u0430 \u0435\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0434\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 PE \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c (\u0445\u043e\u0442\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0438 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438). \u0414\u0430\u043d\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u00ab\u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u0434\u0443\u0449\u0438\u0445 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u041e\u0421.<\/p>\n<p>  \u0421\u0443\u0442\u044c \u0435\u0451 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0437\u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439, \u0431\u0435\u0433\u0430\u044f \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  \u041d\u043e \u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435, \u0438\u0431\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043b\u044e\u0431\u0430\u044f \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<h4>5. \u0411\u043b\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (PEB) + KUSER_SHARED_DATA<\/h4>\n<p>  \u0418\u043c\u0435\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u043a\u0443\u0447\u0430\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u0443\u0436\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435, \u043d\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c?<\/p>\n<p>  \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 NtQueryInformationProcess \u0441 \u0444\u043b\u0430\u0433\u043e\u043c ProcessBasicInformation (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0440\u0430\u0432\u043d\u0430\u044f \u043d\u0443\u043b\u044e). \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 PROCESS_BASIC_INFORMATION, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u0435 PebBaseAddress \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 PEB.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0438 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e) \u0441\u043e\u0432\u043f\u0430\u0434\u0443\u0442. \u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0430\u0434\u0440\u0435\u0441 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB, \u0430 \u043d\u0435 \u0440\u043e\u0434\u043d\u043e\u0433\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Wow64PEB (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u0442\u0430\u043a), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e NtQueryInformationProcess \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c ProcessWow64Information (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0440\u0430\u0432\u043d\u0430\u044f 26) \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0430 \u0440\u0430\u0432\u043d\u044b\u043c SizeOf(ULONG_PTR). \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b PROCESS_BASIC_INFORMATION \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 32-\u0431\u0438\u0442\u043d\u044b\u0439 PEB, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c ReadProcessMemory.<\/p>\n<p>  \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 PEB?<br \/>  \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a: \u0444\u043b\u0430\u0433 BeingDebugged, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043b\u0438 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 PEB_LDR_DATA, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u0445; \u0438 \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445 \ud83d\ude42<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a (\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f Windows7 x86\/64):<\/p>\n<pre><code class=\"delphi\">  PPEB = ^TPEB;   TPEB = record     InheritedAddressSpace: BOOLEAN;     ReadImageFileExecOptions: BOOLEAN;     BeingDebugged: BOOLEAN;     BitField: BOOLEAN;         {             BOOLEAN ImageUsesLargePages : 1;             BOOLEAN IsProtectedProcess : 1;             BOOLEAN IsLegacyProcess : 1;             BOOLEAN IsImageDynamicallyRelocated : 1;             BOOLEAN SkipPatchingUser32Forwarders : 1;             BOOLEAN IsPackagedProcess : 1;             BOOLEAN IsAppContainer : 1;             BOOLEAN SpareBits : 1;         }     Mutant: HANDLE;     ImageBaseAddress: PVOID;     LoaderData: PVOID;     ProcessParameters: PRTL_USER_PROCESS_PARAMETERS;     SubSystemData: PVOID;     ProcessHeap: PVOID;     FastPebLock: PRTLCriticalSection;     AtlThunkSListPtr: PVOID;     IFEOKey: PVOID;     EnvironmentUpdateCount: ULONG;     UserSharedInfoPtr: PVOID;     SystemReserved: ULONG;     AtlThunkSListPtr32: ULONG;     ApiSetMap: PVOID;     TlsExpansionCounter: ULONG;     TlsBitmap: PVOID;     TlsBitmapBits: array[0..1] of ULONG;     ReadOnlySharedMemoryBase: PVOID;     HotpatchInformation: PVOID;     ReadOnlyStaticServerData: PPVOID;     AnsiCodePageData: PVOID;     OemCodePageData: PVOID;     UnicodeCaseTableData: PVOID;      KeNumberOfProcessors: ULONG;     NtGlobalFlag: ULONG;      CriticalSectionTimeout: LARGE_INTEGER;     HeapSegmentReserve: SIZE_T;     HeapSegmentCommit: SIZE_T;     HeapDeCommitTotalFreeThreshold: SIZE_T;     HeapDeCommitFreeBlockThreshold: SIZE_T;      NumberOfHeaps: ULONG;     MaximumNumberOfHeaps: ULONG;     ProcessHeaps: PPVOID;      GdiSharedHandleTable: PVOID;     ProcessStarterHelper: PVOID;     GdiDCAttributeList: ULONG;      LoaderLock: PRTLCriticalSection;      NtMajorVersion: ULONG;     NtMinorVersion: ULONG;     NtBuildNumber: USHORT;     NtCSDVersion: USHORT;     PlatformId: ULONG;     Subsystem: ULONG;     MajorSubsystemVersion: ULONG;     MinorSubsystemVersion: ULONG;     AffinityMask: ULONG_PTR;     {$IFDEF WIN32}     GdiHandleBuffer: array [0..33] of ULONG;     {$ELSE}     GdiHandleBuffer: array [0..59] of ULONG;     {$ENDIF}     PostProcessInitRoutine: PVOID;      TlsExpansionBitmap: PVOID;     TlsExpansionBitmapBits: array [0..31] of ULONG;      SessionId: ULONG;      AppCompatFlags: ULARGE_INTEGER;     AppCompatFlagsUser: ULARGE_INTEGER;     pShimData: PVOID;     AppCompatInfo: PVOID;      CSDVersion: UNICODE_STRING;      ActivationContextData: PVOID;     ProcessAssemblyStorageMap: PVOID;     SystemDefaultActivationContextData: PVOID;     SystemAssemblyStorageMap: PVOID;      MinimumStackCommit: SIZE_T;      FlsCallback: PPVOID;     FlsListHead: LIST_ENTRY;     FlsBitmap: PVOID;     FlsBitmapBits: array [1..FLS_MAXIMUM_AVAILABLE div SizeOf(ULONG) * 8] of ULONG;     FlsHighIndex: ULONG;      WerRegistrationData: PVOID;     WerShipAssertPtr: PVOID;     pContextData: PVOID;     pImageHeaderHash: PVOID;      TracingFlags: ULONG;         {             ULONG HeapTracingEnabled : 1;             ULONG CritSecTracingEnabled : 1;             ULONG LibLoaderTracingEnabled : 1;             ULONG SpareTracingBits : 29;         }     CsrServerReadOnlySharedMemoryBase: ULONGLONG;   end; <\/code><\/pre>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u0442\u043e\u0439, \u0447\u0442\u043e <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/aa813706(v=vs.85).aspx\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 MSDN<\/a>.<\/p>\n<p>  \u0414\u043b\u044f Window 2000\/XP\/2003 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435.<br \/>  \u0420\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0435 \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 PEB \u0438 \u0442\u0430\u043a \u0437\u043d\u0430\u044e\u0442? \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043c \u043d\u0443\u0436\u043d\u043e, \u043d\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u044f \u0437\u0430\u043e\u0441\u0442\u0440\u044e \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0418\u0442\u0430\u043a:<\/p>\n<ul>\n<li>\u041f\u043e\u043b\u0435 BeingDebugged \u2014 <a href=\"http:\/\/habrahabr.ru\/post\/178183\/\">\u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435<\/a> \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0430\u0442\u0447\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u0443\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 PEB \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 BeingDebugged \u043d\u0430 \u043d\u043e\u043b\u044c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f IsDebuggerPresent, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c False, \u0433\u043e\u0432\u043e\u0440\u044f \u043e \u0442\u043e\u043c? \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043e\u043d\u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430.<\/li>\n<li>\u041f\u043e\u043b\u0435 ImageBaseAddress \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 hInstance \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u0435\u043c ImageBase \u0432 PE \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435).<\/li>\n<li>LoaderData \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445, \u0432 \u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0440\u043e\u0438\u0442 \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0438\u0442 \u0441\u0432\u0435\u0442 \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0436\u0435\u043a\u0442\u0430 \u0432 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \ud83d\ude42<\/li>\n<li>ProcessParameters \u2014 \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e ParamStr\/GetCurrentDir \u0438 \u0442.\u043f. \u0444\u0443\u043d\u043a\u0446\u0438\u0438? \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u0441\u0438\u0434\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0410 \u0435\u0449\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043f\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u0434\u0435\u0440\u0433\u0430\u044f \u0440\u0435\u0435\u0441\u0442\u0440, \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0435 CSDVersion. \u0414\u0430, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u043b\u044f NtMajorVersion\/NtMinorVersion\/NtBuildNumber \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0441\u0430\u043c\u0438 \u0437\u0430 \u0441\u0435\u0431\u044f.<\/li>\n<\/ul>\n<p>  \u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u2014 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, ProcessParameters \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0438\u0434\u0438\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u0443\u0447, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0442\u043e\u0436\u0435 \u0433\u0434\u0435-\u0442\u043e \u0432 \u0442\u043e\u043c \u0440\u0430\u0439\u043e\u043d\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e (\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u0432\u0435\u0434\u0443), \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0439 \u0438\u043c\u0435\u0442\u044c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0442\u043e-\u0442\u043e \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/074\/f6e\/f94\/074f6ef947c187f786cea3ed3b6abf0b.png\"\/><\/div>\n<p>  \u0410 \u0432\u0435\u0434\u044c \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0438 KUSER_SHARED_DATA.<br \/>  \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0438 \u0432\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u0441 \u043d\u0435\u0439, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0442\u043e\u0442 \u0436\u0435 GetTickCount \u0438\u043b\u0438 IsProcessorFeaturePresent.<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, NtSystemRoot \u0441\u0438\u0434\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0439, \u0434\u0430 \u0438, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0437\u0430\u0447\u0435\u043c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c, \u043f\u0440\u043e\u0449\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/b4c\/e0c\/033\/b4ce0c033e1f51c903272fde21855dd6.png\"\/><\/div>\n<p>  <\/p>\n<ul>\n<li>\u0425\u043e\u0442\u0438\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0431\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 GetForegroundWindow \u2013 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 ConsoleSessionForegroundProcessId.<\/li>\n<li>\u0412\u0430\u043c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u043b\u0435\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Win, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0430\u0441\u044c \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b, \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 OS? \u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 NtMajorVersion\/NtMinorVersion&#8230;<\/li>\n<\/ul>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f\u2026<\/p>\n<h4>6. TRegionData<\/h4>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445. \u0413\u043e\u0442\u043e\u0432\u044f\u0441\u044c \u043a \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u00abMemoryMap\u00bb, \u0438\u0445 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"http:\/\/rouse.drkb.ru\/blog\/pmm2.zip\">\u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a>.<\/p>\n<blockquote><p>\u0412\u0410\u0416\u041d\u041e!!!<br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 Delphi XE4, \u043f\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Delphi \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p><\/blockquote>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u043e\u043d\u0443 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441 TRegionData, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u00abMemoryMap.RegionData.pas\u00bb.<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f).<\/p>\n<pre><code class=\"delphi\">  TRegionData = class   private     FParent: TRegionData;     FRegionType: TRegionType;     FMBI: TMemoryBasicInformation;     FDetails: string;     FRegionVisible: Boolean;     FHiddenRegionCount: Integer;     FTotalRegionSize: NativeUInt;     FHeap: THeapData;     FThread: TThreadData;     FPEBData: TSystemData;     FSection: TSection;     FContains: TList;     FDirectories: TList;     FShared: Boolean;     FSharedCount: Integer;     FFiltered: Boolean;   protected ...   public     constructor Create;     destructor Destroy; override;     property RegionType: TRegionType read FRegionType;     property MBI: TMemoryBasicInformation read FMBI;     property Details: string read FDetails;     property RegionVisible: Boolean read FRegionVisible;     property HiddenRegionCount: Integer read FHiddenRegionCount;     property Parent: TRegionData read FParent;     property TotalRegionSize: NativeUInt read FTotalRegionSize;     property Heap: THeapData read FHeap;     property Thread: TThreadData read FThread;     property SystemData: TSystemData read FPEBData;     property Section: TSection read FSection;     property Directory: TList read FDirectories;     property Contains: TList read FContains;   end; <\/code><\/pre>\n<p>  \u041f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443:<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<br \/>  \u0422.\u0435. \u0434\u043b\u044f \u043a\u0443\u0447, \u0441\u0442\u0435\u043a\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, PE \u0444\u0430\u0439\u043b\u043e\u0432, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<br \/>  \u0417\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e RegionType. \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u0439 \u0442\u0438\u043f, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">  \/\/ \u0422\u0438\u043f \u0440\u0435\u0433\u0438\u043e\u043d\u0430   TRegionType = (     rtDefault,     rtHeap,                \/\/ \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0443\u0447\u0438     rtThread,              \/\/ \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u043b\u0438 TEB     rtSystem,              \/\/ \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (PEB\/KUSER_SHARED_DATA \u0438 \u0442.\u043f.)     rtExecutableImage      \/\/ \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e PE \u0444\u0430\u0439\u043b\u0430     ); <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 VirtualQueryEx \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 MBI.<\/p>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 Details. \u0412 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u043c\u0443 PE \u0444\u0430\u0439\u043b\u0443, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 ID \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u0442.\u043f\u2026<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<br \/>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0443\u0437\u043b\u043e\u043c (\u0440\u0443\u0442\u043e\u043c), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435.<br \/>  \u0424\u043b\u0430\u0433 RegionVisible \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0443\u0437\u043b\u043e\u043c.<br \/>  \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e HiddenRegionCount \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 (AllocationBase \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0432\u0435\u043d BaseAddress \u0440\u0443\u0442\u0430).<br \/>  \u041d\u0443 \u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Parent \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0443\u0442\u0430.<br \/>  \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043d\u043e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0442\u043e\u043c \ud83d\ude42<\/p>\n<p>  TotalRegionSize \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0443\u0442\u043e\u0432\u044b\u0439.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0443\u0447\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0435\u0440\u0432\u043e\u043c \u0435\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Heap, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<pre><code class=\"delphi\">  THeapEntry = record     Address: ULONG_PTR;     Size: SIZE_T;     Flags: ULONG;   end;    THeapData = record     ID: DWORD;     Wow64: Boolean;     Entry: THeapEntry;   end; <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0443\u0447\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 Contains.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u0435 Contains \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432.<\/p>\n<pre><code class=\"delphi\">  TContainItemType = (itHeapBlock, itThreadData,     itStackFrame, itSEHFrame, itSystem);    TContainItem = record     ItemType: TContainItemType;     function Hash: string;     case Integer of       0: (Heap: THeapData);       1: (ThreadData: TThreadData);       2: (StackFrame: TThreadStackEntry);       3: (SEH: TSEHEntry);       4: (System: TSystemData);   end; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u0435 Thread, \u0432 \u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u0442\u043e\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"delphi\">type   TThreadInfo = (tiNoData, tiExceptionList, tiStackBase,     tiStackLimit, tiTEB, tiThreadProc);  type   TThreadData = record     Flag: TThreadInfo;     ThreadID: Integer;     Address: Pointer;     Wow64: Boolean;   end; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u043e\u0442\u043e\u043a\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043c\u043d\u043e\u0433\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043f\u0438\u0441\u043e\u043a SEH \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0438\u043b\u0438 CallStack \u043f\u043e\u0442\u043e\u043a\u0430), \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 Contains.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 (\u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 PEB\/TEB \u0438 \u0442.\u043f.) \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 SystemData, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0438\u0437 \u0441\u0435\u0431\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043f\u043e\u043b\u0435 Contains.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0439 PE \u0444\u0430\u0439\u043b\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0435\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 Section. \u041d\u0443 \u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 Directory.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a \u0432\u043a\u0440\u0430\u0442\u0446\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 TRegionData \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 TMemoryMap\u2026<\/p>\n<h4>7. TMemoryMap<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u00abMemoryMap.Core.pas\u00bb.<br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0435\u0433\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043a \u0442\u0440\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u044d\u0442\u0430\u043f\u0430\u043c:<\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0438\u0442\u044f\u043c\/\u043a\u0443\u0447\u0430\u043c\/\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u0430\u043c \u0438 \u0442.\u043f..<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430 TRegionData \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\/\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<\/ol>\n<p>  \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u0431\u043e\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">function TMemoryMap.InitFromProcess(PID: Cardinal;   const ProcessName: string): Boolean; var   ProcessLock: TProcessLockHandleList; begin   Result := False;   FRegions.Clear;   FModules.Clear;   FFilter := fiNone;   ProcessLock := nil;   \/\/ \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435   FProcess := OpenProcess(     PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,     False, PID);   if FProcess = 0 then     RaiseLastOSError;   try     FPID := PID;     FProcessName := ProcessName;      \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430     FProcess64 := False;     {$IFDEF WIN64}       if not IsWow64(FProcess) then         FProcess64 := True;     {$ELSE}       \/\/ \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 32 \u0431\u0438\u0442\u043d\u043e\u0435, \u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 64-\u0431\u0438\u0442\u043d\u044b\u0439       \/\/ \u043a\u0438\u0434\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435       if Is64OS and not IsWow64(FProcess) then         raise Exception.Create('Can''t scan process.');     {$ENDIF}      \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0443\u0441\u043f\u0435\u043d\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430     if SuspendProcessBeforeScan then       ProcessLock := SuspendProcess(PID);     try       FSymbols := TSymbols.Create(FProcess);       try         FPEImage := TPEImage.Create;         try           FWorkset := TWorkset.Create(FProcess);;           try             \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c \u0438 \u043e\u0442\u043c\u0430\u043f\u043b\u0435\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c             GetAllRegions;           finally             FWorkset.Free;           end;            {$IFDEF WIN64}           \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043a\u0443\u0447\u0430\u0445           AddWow64HeapsData;           {$ENDIF}            \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445           AddThreadsData;           \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u0443\u0447\u0430\u0445           AddHeapsData;           \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e Process Environment Block           AddPEBData;           \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b\u0445 PE \u0444\u0430\u0439\u043b\u0430\u0445           AddImagesData;         finally           FPEImage.Free;         end;       finally         FSymbols.Free;       end;     finally       if SuspendProcessBeforeScan then         ResumeProcess(ProcessLock);     end;     \/\/ \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c     SortAllContainsBlocks;     \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445     CalcTotal;     \/\/ \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440     UpdateRegionFilters;   finally     CloseHandle(FProcess);   end; end; <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 GetAllRegions\/AddThreadsData\/AddHeapsData \u0438 AddImagesData \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u043b\u0430\u0432\u0430\u0445 \u0438 \u043d\u0430 \u043d\u0435\u043c \u044f \u0437\u0430\u043e\u0441\u0442\u0440\u044f\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443, \u0430 \u0432\u043e\u0442 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0421\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<br \/>  \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e), \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  \u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u043a\u0430\u044f:  <\/p>\n<ol>\n<li>32-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u0434 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435.<\/li>\n<li>64-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435.<\/li>\n<li>32-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <b>\u041d\u0415 \u041c\u041e\u0416\u0415\u0422<\/b> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443.<\/li>\n<li>32-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u0434 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421, <b>\u043d\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/b>.<\/li>\n<li>64-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443, <b>\u043d\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/b>.<\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u0443\u043d\u043a\u0442\u0430\u043c\u0438 \u0432\u0441\u0435 \u044f\u0441\u043d\u043e, \u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0442\u043e\u0433\u043e \u0447\u0442\u043e 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043f\u043b\u044e\u0441 ReadProcessMemory \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 ERROR_PARTIAL_COPY.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 \u0432\u0441\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0445\u0438\u0442\u0440\u0435\u0435.<br \/>  \u041a\u0430\u043a \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u0432 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0447\u0435\u0442\u044b\u0440\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u043a\u0443\u0447\u0438\/\u043f\u043e\u0442\u043e\u043a\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0443\u0447 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438\u0437 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a 32 \u0431\u0438\u0442\u0430\u043c, \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64-\u0431\u0438\u0442\u043d\u044b\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f.<\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e 32-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e, \u0432\u0435\u0440\u043d\u0443\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a 64 \u0431\u0438\u0442\u0430\u043c. \u0425\u043e\u0442\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e.<br \/>  \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u043a 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 PEB \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"delphi\">const   ProcessWow64Information = 26; ...   NtQueryInformationProcess(FProcess, ProcessWow64Information,     @FPebWow64BaseAddress, SizeOf(ULONG_PTR), @ReturnLength) <\/code><\/pre>\n<p>  \u0414\u043e\u0441\u0442\u0443\u043f \u043a 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 TEB \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0441\u0447\u0438\u0442\u0430\u0432 \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e TEB, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 NtTIB.ExceptionList.<\/p>\n<pre><code class=\"delphi\">        \/\/ \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c TEB \u043f\u043e\u043b\u0435 TIB.ExceptionList \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e Wow64TEB         if not ReadProcessMemory(hProcess,           TIB.ExceptionList, @WOW64_NT_TIB, SizeOf(TWOW64_NT_TIB),           lpNumberOfBytesRead) then Exit; <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0443\u0442\u043a\u0438 CallStack \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">const   ThreadWow64Context = 29; ...     ThreadContext^.ContextFlags := CONTEXT_FULL;     if NtQueryInformationThread(hThread, ThreadWow64Context, ThreadContext,       SizeOf(TWow64Context), nil) &lt;&gt; STATUS_SUCCESS then Exit; <\/code><\/pre>\n<p>  \u041b\u0438\u0431\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Wow64GetThreadContext.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043a\u0443\u0447\u0430\u0445 \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043c\u043d\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0441\u0435\u0439\u0447\u0430\u0441, \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043a\u0443\u0447\u0430\u0445 \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 64-\u0431\u0438\u0442\u043d\u044b\u0439 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u0438\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 AddWow64HeapsData).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SuspendProcess.<\/p>\n<p>  \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u044f. \u041f\u0440\u0430\u0432\u0434\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c. \u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442?<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<ol>\n<li>TSymbols \u2014 \u043e \u043d\u0435\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435.<\/li>\n<li>TPEImage \u2014 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e PE \u0444\u0430\u0439\u043b\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435. \u0421\u0434\u0435\u043b\u0430\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/li>\n<li>TWorkset \u2014 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<\/ol>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, TWorkset \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"delphi\">  TShareInfo = record     Shared: Boolean;     SharedCount: Byte;   end; <\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<br \/>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u0435:<\/p>\n<ul>\n<li>Shared \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439<\/li>\n<li>SharedCount \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u043a \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 QueryWorkingSet:<\/p>\n<pre><code class=\"delphi\">procedure TWorkset.InitWorksetData(hProcess: THandle); const   {$IFDEF WIN64}   AddrMask = $FFFFFFFFFFFFF000;   {$ELSE}   AddrMask = $FFFFF000;   {$ENDIF}   SharedBitMask = $100;   SharedCountMask = $E0;    function GetSharedCount(Value: ULONG_PTR): Byte; inline;   begin     Result := (Value and SharedCountMask) shr 5;   end;  var   WorksetBuff: array of ULONG_PTR;   I: Integer;   ShareInfo: TShareInfo; begin   SetLength(WorksetBuff, $400000);   while not QueryWorkingSet(hProcess, @WorksetBuff[0],     Length(WorksetBuff) * SizeOf(ULONG_PTR)) do     SetLength(WorksetBuff, WorksetBuff[0] * 2);   for I := 0 to WorksetBuff[0] - 1 do   begin     ShareInfo.Shared := WorksetBuff[I]  and SharedBitMask &lt;&gt; 0;     ShareInfo.SharedCount := GetSharedCount(WorksetBuff[I]);     try       FData.Add(Pointer(WorksetBuff[I] and AddrMask), ShareInfo);     except       on E: EListError do ;     else       raise;     end;   end; end; <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 ULONG_PTR, \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u044f\u0442\u044c \u0431\u0438\u0442 \u0445\u0440\u0430\u043d\u044f\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438 \u0431\u0438\u0442\u0430 \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430; \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b; \u043d\u0443 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<br \/>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0443\u0442: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms684902(v=vs.85).aspx\">PSAPI_WORKING_SET_BLOCK<\/a>.<\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u0434\u0443.<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0448\u0430\u0433\u0430\u043c\u0438 \u0438\u0434\u0443\u0442:<\/p>\n<ol>\n<li>GetAllRegions \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u044b.<\/li>\n<li>AddThreadsData \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b.<\/li>\n<li>AddHeapsData \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0433\u043b\u0430\u0432\u044b.<\/li>\n<li>AddPEBData \u2014 \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438\u0437 \u043f\u044f\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u044b.<\/li>\n<li>AddImagesData \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u044b.<\/li>\n<\/ol>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u044f \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b (\u043d\u0443 \u043f\u043e\u0447\u0442\u0438) \ud83d\ude42<\/p>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0448\u0430\u0433\u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0430 UpdateRegionFilters.<br \/>  \u041e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0435\u0433\u0438\u043e\u043d\u044b (\u043d\u0443, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0441 \u043d\u0435\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0442.\u043f).<br \/>  \u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Filter.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u043a\u043e\u0434\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<br \/>  \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"delphi\">var   AMemoryMap: TMemoryMap;   M: TMemoryStream;   I: Integer; begin   try     M := TMemoryStream.Create;     try        \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441       AMemoryMap := TMemoryMap.Create;       try         \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438         AMemoryMap.InitFromProcess(GetCurrentProcessId, '');         \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0435,         AMemoryMap.SaveToStream(M);         \/\/ \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0434\u0430\u043c\u043f\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u0434\u0443\u0448\u0435 \u0443\u0433\u043e\u0434\u043d\u043e       finally         AMemoryMap.Free;       end;        \/\/ \u0442\u0443\u0442 \u044f\u043a\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0443\u0434\u0430-\u0442\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0445 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c       M.Position := 0;        \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441       AMemoryMap := TMemoryMap.Create;       try         \/\/ \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435         AMemoryMap.LoadFromStream(M);         \/\/ \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b         AMemoryMap.Filter := fiNone; \/\/ \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e         \/\/ \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0441 \u043d\u0435\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e         AMemoryMap.ShowEmpty := True;         \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432         for I := 0 to AMemoryMap.Count - 1 do           Writeln(NativeUInt(AMemoryMap[I].MBI.BaseAddress));       finally         AMemoryMap.Free;       end;      finally       M.Free;     end;   except     on E: Exception do       Writeln(E.ClassName, ': ', E.Message);   end;   Readln; end. <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u043f\u0438\u0441\u0430\u043b \u0441\u0430\u043c \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \ud83d\ude42<\/p>\n<h4>8. TSymbols \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438<\/h4>\n<p>  \u0421\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u0434\u0440\u0435\u0441\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u041d\u0443, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 CallStack \u043f\u043e\u0442\u043e\u043a\u0430 (\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SEH \u0444\u0440\u0435\u0439\u043c\u043e\u0432) \u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430. \u041d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0443\u0445\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/e34\/b7d\/c32\/e34b7dc3242438be28250b4521296663.png\"\/><\/div>\n<p>  \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SymGetSymFromAddr, \u043d\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u044e\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">function TSymbols.GetDescriptionAtAddr(Address, BaseAddress: ULONG_PTR;   const ModuleName: string): string; const   BuffSize = $7FF; {$IFDEF WIN64}   SizeOfStruct = SizeOf(TImagehlpSymbol64);   MaxNameLength = BuffSize - SizeOfStruct; var   Symbol: PImagehlpSymbol64;   Displacement: DWORD64; {$ELSE}   SizeOfStruct = SizeOf(TImagehlpSymbol);   MaxNameLength = BuffSize - SizeOfStruct; var   Symbol: PImagehlpSymbol;   Displacement: DWORD; {$ENDIF} begin   Result := '';   if not FInited then Exit;   GetMem(Symbol, BuffSize);   try     Symbol^.SizeOfStruct := SizeOfStruct;     Symbol^.MaxNameLength := MaxNameLength;     Symbol^.Size := 0;     SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),       nil, BaseAddress, 0);     try       if SymGetSymFromAddr(FProcess, Address, @Displacement, Symbol) then         Result := string(PAnsiChar(@(Symbol^).Name[0])) + ' + 0x' + IntToHex(Displacement, 4)       else       begin         \/\/ \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f         SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)), nil, BaseAddress, 0);         if SymGetSymFromAddr(FProcess, Address, @Displacement, Symbol) then           Result := string(PAnsiChar(@(Symbol^).Name[0])) + ' + 0x' + IntToHex(Displacement, 4);       end;     finally       SymUnloadModule(FProcess, BaseAddress);     end;   finally     FreeMem(Symbol);   end;   if Result = '' then     Result := ExtractFileName(ModuleName) + ' + 0x' + IntToHex(Address - BaseAddress, 1); end; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043b\u0438\u0431\u043e \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u0430 (\u0432 \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430). \u042d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SymLoadModule.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043d\u044e\u0430\u043d\u0441 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SymGetSymFromAddr \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043c\u043d\u0435 \u043d\u0435 \u044f\u0441\u043d\u0430, \u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0438 \u043a\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0435\u0451 \u2014 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SymLoadModule \u0431\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 SymUnloadModule. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u2013 \u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 (\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f).<\/p>\n<p>  \u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0439 \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442.<br \/>  \u0412\u043e\u0442 \u0442\u0430\u043a, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 Chrome (CallStack + SEH \u0444\u0440\u0435\u0439\u043c\u044b):<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/66f\/e23\/966\/66fe23966c7f628284944a21f0dfafdb.png\"\/><\/div>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u0445 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.<br \/>  \u0412 \u043a\u043b\u0430\u0441\u0441\u0435 TSymbols \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b GetExportFuncList \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function SymEnumsymbolsCallback(SymbolName: LPSTR; SymbolAddress: ULONG_PTR;   SymbolSize: ULONG; UserContext: Pointer): Bool; stdcall; var   List: TStringList; begin   List := UserContext;   List.AddObject(string(SymbolName), Pointer(SymbolAddress));   Result := True; end;  procedure TSymbols.GetExportFuncList(const ModuleName: string;   BaseAddress: ULONG_PTR; Value: TStringList); begin   SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),     nil, BaseAddress, 0);   try     if not SymEnumerateSymbols(FProcess, BaseAddress,       @SymEnumsymbolsCallback, Value) then     begin       SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),         nil, BaseAddress, 0);       SymEnumerateSymbols(FProcess, BaseAddress,         @SymEnumsymbolsCallback, Value)     end;   finally     SymUnloadModule(FProcess, BaseAddress);   end; end; <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0437\u043e\u0432\u0443 SymEnumerateSymbols, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.<br \/>  \u041f\u0440\u0438 \u0435\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 SymbolName \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043c\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 SymbolAddress \u0435\u0435 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>  \u042d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/b22\/b8c\/882\/b22b8c8825a7253da07af80d884a5fcd.png\"\/><\/div>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b SymSetOptions \u0438 SymInitialize, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u00abMemoryMap.Symbols.pas\u00bb.<\/p>\n<h4>9. ProcessMemoryMap<\/h4>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u0438 \u043a \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  \u041a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 MemoryMap \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445:<\/p>\n<p>  1. \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u044f \u0435\u0433\u043e \u0432 \u0432\u044b\u0432\u043e\u0434 EurekaLog \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 OnAttachedFilesRequest, \u0433\u0434\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0438 \u0434\u0430\u043c\u043f\u044b \u0432\u0441\u0435\u0445 Private \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 (\u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0444\u043b\u0430\u0433 MEM_PRIVATE) \u0438 \u0441\u0442\u0435\u043a\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u043b\u044e\u0441 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 PEB. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u0440\u0438\u0447\u0438\u043d \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438.<br \/>  2. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 MemoryMap, \u043f\u043b\u044e\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/aba\/6d8\/5a5\/aba6d85a5483f480c65bd4d5102eeb26.png\"\/><\/div>\n<p>  \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443.<\/p>\n<p>  \u0421 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 VMMap. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0442\u0430\u043a \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u0438\u0431\u043e \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>  \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043e\u0431\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c, \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e \u0438\u0445 \u0442\u0438\u043f\u0430\u043c, \u043e\u043d \u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c.<\/p>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b:<\/p>\n<p>  1. \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 (Ctrl+Q).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/c86\/c9f\/7d3\/c86c9f7d31f7a0dfec05c190db8bd83a.png\"\/><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi \u0432 \u043e\u043a\u043d\u0435 CPU View, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u043b\u044f PEB, \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/bcc\/a90\/19e\/bcca9019ec5478eef734de0892ee9007.png\"\/><\/div>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043b\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/579\/4cc\/e22\/5794cce22a5638afad720e93cf256821.png\"\/><\/div>\n<p>  \u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0441\u0435\u0433\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c:<\/p>\n<ul>\n<li>PEB \u2014 Process Environment Block (32\/64)<\/li>\n<li>TEB \u2014 Thread Environment Block (32\/64)<\/li>\n<li>KUSER_SHARED_DATA<\/li>\n<li>PE Header (IMAGE_DOS_HEADER \/ IMAGE_NT_HEADER \/ IMAGE_FILE_HEADER \/ IMAGE_OPTIONAL_HEADER(32\/64) \/ IMAGE_DATA_DIRECTORY \/ IMAGE_SECTION_HEADERS)<\/li>\n<li>Process Parameters (32\/64)<\/li>\n<\/ul>\n<p>  \u042d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>  2. \u041f\u043e\u0438\u0441\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (Ctrl+F):<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/d14\/cd4\/85f\/d14cd485fbf8f7c66ccd971af0c61492.png\"\/><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<br \/>  \u041f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e Ansi, \u0442\u0430\u043a \u0438 \u043f\u043e Unicode \u0441\u0442\u0440\u043e\u043a\u0435, \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u043c\u0443 HEX \u0431\u0443\u0444\u0435\u0440\u0443. \u041f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0438\u0441\u043a\u0430, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0444\u043b\u0430\u0433, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u043a\u043d\u0430 \u0441 \u0434\u0430\u043c\u043f\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435.<\/p>\n<p>  3. \u041a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u0434\u0432\u0443\u0445 \u043a\u0430\u0440\u0442 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.<\/p>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/260\/07a\/68a\/26007a68a634790a227303ae671ffd5d.png\"\/><\/div>\n<p>  \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u043a\u0430\u0440\u0442\u044b, \u0430 \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c 4 \u0431\u0430\u0439\u0442\u0430, \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f. \u041d\u043e \u0432\u043e\u0442 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0443\u0434\u0430\u043b\u0438\u043b\u0430\u0441\u044c \u043a\u0443\u0447\u0430, \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043b\u0441\u044f\/\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0441\u044f \u0444\u0430\u0439\u043b \u0438 \u0442.\u043f. \u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.<br \/>  \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u043a\u0430\u0440\u0442\u044b \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u0440\u0430\u043d\u0435\u0435, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043d\u0438\u043c\u043a\u0430 \u043f\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435 F5.<\/p>\n<p>  4. \u0414\u0430\u043c\u043f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>  5. \u0412\u044b\u0432\u043e\u0434 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (Ctrl+E).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/e5b\/761\/7fb\/e5b7617fbc4aafcd1a614fbcf0d3f346.png\"\/><\/div>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0435\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0443.<\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0438 \u043d\u043e\u0432\u044b\u0439 \u044f \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b, \u043d\u043e \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0434\u0430\u043d\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  ProcessMemoryMap \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f OpenSource \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c.<br \/>  \u0415\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"http:\/\/rouse.drkb.ru\/winapi.php#pmm2\">http:\/\/rouse.drkb.ru\/winapi.php#pmm2<\/a><br \/>  GitHub \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap\">https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap<\/a><\/p>\n<p>  \u041f\u0440\u044f\u043c\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434: <a href=\"https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap\/archive\/master.zip\">https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap\/archive\/master.zip<\/a><br \/>  \u041f\u0440\u044f\u043c\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0431\u043e\u0440\u043a\u0443: <a href=\"http:\/\/rouse.drkb.ru\/files\/processmm_bin.zip\">http:\/\/rouse.drkb.ru\/files\/processmm_bin.zip<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Virtual TreeView \u0432\u0435\u0440\u0441\u0438\u0438 5 \u0438 \u0432\u044b\u0448\u0435: <a href=\"http:\/\/www.soft-gems.net\/\">http:\/\/www.soft-gems.net\/<\/a>.<\/p>\n<p>  <b>\u0421\u0431\u043e\u0440\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Delphi XE4<\/b> \u0438 \u0432\u044b\u0448\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00abWin32\/Release\u00bb, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 (\u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430) 64-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<br \/>  \u041f\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Delphi \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c ProcessMemoryMap \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c.<\/p>\n<h4>10. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u042f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0448\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u0432\u0435\u0440\u0448\u043a\u0430\u043c, \u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u0442\u043e \u043e\u0431\u044a\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435\u0438\u043c\u043e\u0432\u0435\u0440\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0442 \u0432\u0430\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u043a, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 TEB\/PEB \u0438 \u0442.\u043f. \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c:<br \/>  <a href=\"http:\/\/processhacker.sourceforge.net\/\">http:\/\/processhacker.sourceforge.net\/<\/a><br \/>  <a href=\"http:\/\/redplait.blogspot.ru\/\">http:\/\/redplait.blogspot.ru\/<\/a><br \/>  <a href=\"http:\/\/www.reactos.org\/ru\">http:\/\/www.reactos.org\/ru<\/a><\/p>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e PE \u0444\u0430\u0439\u043b\u0430\u0445:<br \/>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/ms809762.aspx\">http:\/\/msdn.microsoft.com\/en-us\/magazine\/ms809762.aspx<\/a><\/p>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e SEH:<br \/>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms680657(v=VS.85).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/ms680657(v=VS.85).aspx<\/a><br \/>  <a href=\"http:\/\/www.microsoft.com\/msj\/0197\/exception\/exception.aspx\">http:\/\/www.microsoft.com\/msj\/0197\/exception\/exception.aspx<\/a><br \/>  <a href=\"http:\/\/qxov.narod.ru\/articles\/seh\/seh.html\">http:\/\/qxov.narod.ru\/articles\/seh\/seh.html<\/a><\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u0441\u0435\u0445 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c <a href=\"http:\/\/rouse.drkb.ru\/blog\/pmm2.zip\">\u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>  \u041e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0421\u041f\u0410\u0421\u0418\u0411\u041e \u0444\u043e\u0440\u0443\u043c\u0443 <a href=\"http:\/\/www.delphimaster.ru\/\">\u00ab\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0414\u0435\u043b\u044c\u0444\u0438\u00bb<\/a> \u0437\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u0443\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u044b\u0447\u0438\u0442\u043a\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0414\u043c\u0438\u0442\u0440\u0438\u044e aka \u00ab\u0431\u0440\u0430\u0442 \u041f\u0442\u0438\u0431\u0443\u0440\u0434\u0443\u043a\u043e\u0432\u0430\u00bb, \u0410\u043d\u0434\u0440\u0435\u044e \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432\u0443 aka \u00abInovet\u00bb, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0421\u0435\u0440\u0433\u0435\u044e aka \u00ab\u041a\u0430\u0440\u0442\u043c\u0430\u043d\u00bb.<\/p>\n<p>  \u0423\u0434\u0430\u0447\u0438.<\/p>\n<p>  \u00a9 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 (Rouse_) \u0411\u0430\u0433\u0435\u043b\u044c<br \/>  \u041d\u043e\u044f\u0431\u0440\u044c, 2013    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/202242\/\"> http:\/\/habrahabr.ru\/post\/202242\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0417\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445-\u0442\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u041f\u041e?<\/p>\n<p>  \u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u0437\u0430\u0447\u0435\u043c?<br \/>  \u041d\u0443 \u043a\u0430\u043a \u0436\u0435, \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f 2-3 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u2013 \u044d\u0442\u043e \u0432\u0430\u0448 \u043b\u0438\u043c\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f AWE \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435, \u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u0441\u0435 \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041d\u043e \u0434\u0430\u0436\u0435 \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f\u2026<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0418 \u0445\u043e\u0442\u044f \u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0432\u043e\u0442 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u2013 \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435\u2026<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u0440\u0438 \u0440\u0435\u0432\u0435\u0440\u0441\u0435):<\/p>\n<p>  1. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u0430\u043a \u0438 \u0432 MS VC++).<br \/>  2. \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 (PEB\/TEB\/SEHChain\/Unwind\/\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 PE-\u0444\u0430\u0439\u043b\u043e\u0432 etc&#8230;) \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0430\u0437\u043c\u0430\u043f\u043b\u0435\u043d\u044b \u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u0438\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<br \/>  3. \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c). \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u043f\u043e\u0441\u0438\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0434\u0432\u0430 \u0441\u043d\u0438\u043c\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0442\u0443\u0442 \u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0442?<\/p>\n<p>  \u0414\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u0431\u0435\u0437 \u043b\u0438\u0440\u0438\u043a\u0438, \u0443\u0442\u0438\u043b\u0438\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e.<\/p>\n<p>  \u0421\u0430\u043c\u0430\u044f \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442 OllyDebug 2, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043d\u0430 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64 \u0431\u0438\u0442\u0430\u043c (\u0432\u0441\u0435 \u0435\u0449\u0435 \u0436\u0434\u0435\u043c).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/e3e\/26e\/cd7\/e3e26ecd76d448f16cf218ecfd044e47.png\"\/><\/div>\n<p>  VMMap \u043e\u0442 \u041c\u0430\u0440\u043a\u0430 \u0420\u0443\u0441\u0441\u0438\u043d\u043e\u0432\u0438\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0447\u0438\u0441\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0434\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0434\u0430 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e Microsoft, \u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0430\u0442\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/7c5\/cc5\/c96\/7c5cc5c961099124ec1d9e8ba7f508a3.png\"\/><\/div>\n<p>  ProcessHacker \u2013 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u043e \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/storage3\/d5d\/a61\/105\/d5da61105cf2c23ac43c7883ecec21eb.png\"\/><\/div>\n<p>  \u041d\u0443 \u0430 \u043a \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 IDA Pro \u0437\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u043a (\u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e) \ud83d\ude42<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0445 \u043b\u043e\u0433\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043c\u043f\u043e\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u0439 \u0432 EurekaLog.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043f\u043e \u0448\u0430\u0433\u0430\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/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-202242","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/202242","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=202242"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/202242\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=202242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=202242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=202242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}