{"id":178159,"date":"2013-04-26T23:01:04","date_gmt":"2013-04-26T19:01:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=178159"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=178159","title":{"rendered":"<span class=\"post_title\">\u0418\u0437\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0447\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0412<a href=\"http:\/\/habrahabr.ru\/post\/178007\/\"> \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c Delphi \u2014 \u043d\u0435 \u0432\u0441\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0430\u0447\u0435: \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u0430\u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c API \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043d\u0435 \u0440\u0430\u0437\u0436\u0435\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 TFWDebugerCore. \u0427\u0430\u0441\u0442\u044c \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0432\u0430\u0436\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u043e\u043f\u0443\u0449\u0443, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u0438\u0445 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u043d\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u0432 \u043d\u0435\u0439, \u0442\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ee663265(v=vs.85).aspx\">Debugging and Error Handling<\/a><br \/>  \u041f\u043e \u043d\u0435\u0439 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043a\u0430\u043a-\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u043c\u0438\u043d\u0438\u0434\u0430\u043c\u043f\u0430\u043c\u0438. \u0420\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438, \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RVA \u0438 VA \u0438 \u043f\u0440\u043e\u0447\u0435\u0435-\u043f\u0440\u043e\u0447\u0435\u0435.<br \/>  \u041d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u043a\u0443\u0445\u043d\u0435.<\/p>\n<p>  \u042f \u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0435\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u0434\u0430\u0431\u044b \u0443 \u0432\u0430\u0441 \u0431\u044b\u043b\u0430 \u0442\u043e\u0447\u043a\u0430, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e-\u0431\u044b \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0435 \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c (\u0430 \u0438\u043d\u0430\u0447\u0435-\u0442\u043e \u043a\u0430\u043a \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443?).<\/p>\n<p>  \u0412 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c MSDN. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>  \u041e\u0442 \u0432\u0430\u0441 \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0445\u043e\u0442\u044f-\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0442.\u043a. \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0443\u0432\u044b \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443:<\/h4>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function SetDebugPriv: Boolean; var   Token: THandle;   tkp: TTokenPrivileges; begin   Result := false;   if OpenProcessToken(GetCurrentProcess,     TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then   begin     if LookupPrivilegeValue(nil, PChar('SeDebugPrivilege'),       tkp.Privileges[0].Luid) then     begin       tkp.PrivilegeCount := 1;       tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;       Result := AdjustTokenPrivileges(Token, False,         tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);     end;   end; end; <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u0441\u044f: \u0431\u0443\u0434\u0435\u043c \u043b\u0438 \u043c\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c\u0441\u044f \u043a \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u043d\u0443\u043b\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0441\u044f, \u0442\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e PID \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">function TFWDebugerCore.AttachToProcess(ProcessID: DWORD;   SentEntryPointBreakPoint: Boolean): Boolean; begin   Result := False;   if FProcessInfo.ProcessID &lt;&gt; 0 then Exit;   FSetEntryPointBreakPoint := SentEntryPointBreakPoint;   FProcessInfo.ProcessID := ProcessID;   Result := DebugActiveProcess(ProcessID); end; <\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0432 Windows \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0434\u0432\u0443\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0438 \u0435\u0441\u043b\u0438 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DebugActiveProcess \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u0435\u043d, \u0430 GetLastError \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438: ERROR_INVALID_PARAMETER.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0441 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f\u043c\u0438, \u0447\u0435\u043c \u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DebugActiveProcess \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u0435\u043d, \u0430 GetLastError \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438: ERROR_ACCESS_DENIED.<\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function TFWDebugerCore.DebugNewProcess(const FilePath: string;   SentEntryPointBreakPoint: Boolean): Boolean; var   PI: TProcessInformation;   SI: TStartupInfo; begin   Result := False;   if FProcessInfo.ProcessID &lt;&gt; 0 then Exit;   FSetEntryPointBreakPoint := SentEntryPointBreakPoint;   ZeroMemory(@SI, SizeOf(TStartupInfo));   SI.cb := SizeOf(TStartupInfo);   Result := CreateProcess(PChar(FilePath),     nil, nil, nil, False, DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS,     nil, nil, SI, PI);   if Result then   begin     FProcessInfo.ProcessID := PI.dwProcessId;     FProcessInfo.CreatedProcessHandle := PI.hProcess;     FProcessInfo.CreatedThreadHandle := PI.hThread;   end; end; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c DEBUG_PROCESS \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0444\u043b\u0430\u0433 DEBUG_ONLY_THIS_PROCESS, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<br \/>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f).<\/p>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0438\u0441\u044c \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u0432\u043e\u0435 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u2014 \u0447\u0442\u043e \u0435\u043c\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043f\u0440\u043e\u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 WaitForDebugEvent, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ContinueDebugEvent, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043f\u044f\u0442\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0436\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<br \/>  \u0422.\u0435. \u0433\u0440\u0443\u0431\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (Debug Event Loop).<\/p>\n<p>  MSND \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Debug Event Loop.<\/p>\n<p>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms681675(v=vs.85).aspx\">Writing the Debugger&#8217;s Main Loop<\/a><\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043c\u044b \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435.<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.RunMainLoop; var   DebugEvent: TDebugEvent;   CallNextLoopIteration: Boolean;   ThreadIndex: Integer; begin   CallNextLoopIteration := False;   repeat       ContinueStatus := DBG_CONTINUE;       if not WaitForDebugEvent(DebugEvent, MainLoopWaitPeriod) then     begin       if GetLastError = ERROR_SEM_TIMEOUT then       begin         DoIdle;         if FProcessInfo.ProcessID = 0 then Exit;         CallNextLoopIteration := True;         Continue;       end       else       begin         DoMainLoopFailed;         Break;       end;     end;           case DebugEvent.dwDebugEventCode of         CREATE_THREAD_DEBUG_EVENT:         DoCreateThread(DebugEvent);         CREATE_PROCESS_DEBUG_EVENT:         DoCreateProcess(DebugEvent);         EXIT_THREAD_DEBUG_EVENT:         DoExitThread(DebugEvent);         EXIT_PROCESS_DEBUG_EVENT:       begin         DoExitProcess(DebugEvent);         Break;       end;         LOAD_DLL_DEBUG_EVENT:         DoLoadDll(DebugEvent);          UNLOAD_DLL_DEBUG_EVENT:         DoUnLoadDll(DebugEvent);         OUTPUT_DEBUG_STRING_EVENT:         DoDebugString(DebugEvent);         RIP_EVENT:         DoRip(DebugEvent);         EXCEPTION_DEBUG_EVENT:       begin         ThreadIndex := GetThreadIndex(DebugEvent.dwThreadId);         case DebugEvent.Exception.ExceptionRecord.ExceptionCode of             EXCEPTION_BREAKPOINT:             ProcessExceptionBreakPoint(ThreadIndex, DebugEvent);             EXCEPTION_SINGLE_STEP:             ProcessExceptionSingleStep(ThreadIndex, DebugEvent);             EXCEPTION_GUARD_PAGE:             ProcessExceptionGuardPage(ThreadIndex, DebugEvent);           else           CallUnhandledExceptionEvents(ThreadIndex, CodeDataToExceptionCode(             DebugEvent.Exception.ExceptionRecord.ExceptionCode), DebugEvent);         end;       end;       end;       CallNextLoopIteration := ContinueDebugEvent(DebugEvent.dwProcessId,       DebugEvent.dwThreadId, ContinueStatus);     until not CallNextLoopIteration; end; <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043d\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0424\u0443\u043d\u043a\u0446\u0438\u044f WaitForDebugEvent \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 DEBUG_EVENT. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 dwDebugEventCode \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, ID \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043d\u0438\u0442\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0434\u0435 union \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">PDebugEvent = ^TDebugEvent; _DEBUG_EVENT = record   dwDebugEventCode: DWORD;   dwProcessId: DWORD;   dwThreadId: DWORD;   case Integer of     0: (Exception: TExceptionDebugInfo);     1: (CreateThread: TCreateThreadDebugInfo);     2: (CreateProcessInfo: TCreateProcessDebugInfo);     3: (ExitThread: TExitThreadDebugInfo);     4: (ExitProcess: TExitProcessDebugInfo);     5: (LoadDll: TLoadDLLDebugInfo);     6: (UnloadDll: TUnloadDLLDebugInfo);     7: (DebugString: TOutputDebugStringInfo);     8: (RipInfo: TRIPInfo); end; {$EXTERNALSYM _DEBUG_EVENT} TDebugEvent = _DEBUG_EVENT; DEBUG_EVENT = _DEBUG_EVENT; {$EXTERNALSYM DEBUG_EVENT} <\/code><\/pre>\n<p>  \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u043e \u043d\u0430 \u043d\u0438\u0445 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043b\u0438\u0431\u043e \u0438\u0437 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ContinueDebugEvent \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 ContinueStatus \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 DBG_CONTINUE.<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441: \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 WaitForDebugEvent \u0432\u0435\u0440\u043d\u0443\u043b \u043e\u0448\u0438\u0431\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443) \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c ContinueDebugEvent \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043e\u043d \u0442\u0430\u043a \u0436\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0434\u0430\u044e\u0442 \u043d\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<h4>CREATE_PROCESS_DEBUG_EVENT:<\/h4>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u041d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0438\u0441\u044c \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 DebugActiveProcess, \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0435\u0433\u043e. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms679286(v=vs.85).aspx\">DebugEvent.CreateProcessInfo (CREATE_PROCESS_DEBUG_INFO structure).<\/a><\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.DoCreateProcess(DebugEvent: TDebugEvent); begin     \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435   FProcessInfo.AttachedFileHandle := DebugEvent.CreateProcessInfo.hFile;   FProcessInfo.AttachedProcessHandle := DebugEvent.CreateProcessInfo.hProcess;   FProcessInfo.AttachedThreadHandle := DebugEvent.CreateProcessInfo.hThread;   FProcessInfo.EntryPoint := DWORD(DebugEvent.CreateProcessInfo.lpStartAddress);     AddThread(DebugEvent.dwThreadId, FProcessInfo.AttachedThreadHandle);     \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c BreakPoint \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430   if FSetEntryPointBreakPoint then     SetBreakpoint(FProcessInfo.EntryPoint, 'Process Entry Point Breakpoint');     if Assigned(FCreateProcess) then   begin     FCreateProcess(Self, GetThreadIndex(DebugEvent.dwThreadId),       DebugEvent.CreateProcessInfo);     DoResumeAction(GetThreadIndex(DebugEvent.dwThreadId));   end; end; <\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u043c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430 \u0442\u0430\u043a-\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c ID \u0438 \u0445\u044d\u043d\u0434\u043b \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043d\u0438\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0437\u0434\u043d\u0435\u0435.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c-\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (Entry Point), \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 DebugEvent.CreateProcessInfo.lpStartAddres \u0438 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0434\u0430\u043b\u0435\u0435 \u0412\u0420) \u043d\u0430 \u0435\u0435 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0443\u0431\u0438\u0442\u044c \u2014 \u0442\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0434\u0430\u043d\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u044b \u043f\u0440\u043e\u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 Delphi \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 F7.<\/p>\n<p>  \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0442\u0435\u043a\u043e\u0432, \u0431\u043b\u043e\u043a\u043e\u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\/\u043d\u0438\u0442\u0435\u0439, \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u0445 TLS \u043a\u0430\u043b\u043b\u0431\u044d\u043a\u043e\u0432 \u0438 \u0442.\u043f. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c. \u0410\u0434\u0440\u0435\u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 PE \u0444\u0430\u0439\u043b\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 PE \u0444\u0430\u0439\u043b\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 PEiD \u0438\u043b\u0438 PeExplorer, \u043d\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 TImageDosHeader, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430, \u0432 \u0435\u0435 \u043f\u043e\u043b\u0435 _lfanew \u0431\u0443\u0434\u0435\u0442 \u043e\u0444\u0444\u0441\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e TImageNtHeaders, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 TImageNtHeaders \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0435\u0435 \u043f\u043e\u043b\u044f TImageNtHeaders.OptionalHeader.AddressOfEntryPoint.<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0432 \u043d\u0435\u043c F7, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0443 CPU-View, \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-tTpCEauKL0U\/UKpr9Izd8SI\/AAAAAAAAAH0\/z4WVeq3qjw4\/s1600\/ep.png\" alt=\"image\"\/><\/p>\n<p>  \u0410\u0434\u0440\u0435\u0441 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f: 0x0043E2D4. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u0441\u043a\u0430\u0436\u0435\u0442 PEiD \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/-Of3870gTOlQ\/UKpsFomhDpI\/AAAAAAAAAH8\/SNuaf00OouU\/s1600\/peid.png\" alt=\"image\"\/><\/p>\n<p>  \u041e\u043d \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0440\u0430\u0432\u043d\u043e 0x0003E2D4.<\/p>\n<p>  \u0425\u043e\u0442\u044c \u043e\u043d\u043e \u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0435\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0435\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 AddressOfEntryPoint \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 RVA (Relative Virtual Address). \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f (hInstance). \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0437 RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c VA (Virtual Address) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c hInstance \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441: \u044d\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0414\u043b\u044f \u043d\u0438\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0435\u043a\u0446\u0438\u0439. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u0435: <a href=\"http:\/\/rouse.drkb.ru\/winapi.php#propsheet\">\u00ab\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0444\u0430\u0439\u043b\u0430\u00bb<\/a>.<br \/>  \u0412 \u043d\u0435\u043c, \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 DebugHlp.pas \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ImageRvaToVa(), \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>  \u041d\u0443 \u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u043c\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 Image Base, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u0435\u043d 0x00400000. \u0421\u043b\u043e\u0436\u0438\u0432 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 0x0043E2D4.<\/p>\n<h4>LOAD_DLL_DEBUG_EVENT:<\/h4>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 CREATE_PROCESS_DEBUG_EVENT \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms680351(v=vs.85).aspx\">DebugEvent.LoadDll (LOAD_DLL_DEBUG_INFO structure).<\/a><\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432 \u043b\u043e\u0433 \u0441\u043e\u0431\u044b\u0442\u0438\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-D8kC9gyK9yk\/UKpsNiMr0-I\/AAAAAAAAAIE\/AiCpbsncXd8\/s1600\/LoadDll.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f Delphi \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0412\u0420 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-iFP15jxSmeo\/UKpsTVZcyXI\/AAAAAAAAAIM\/vmRMIMKt9D0\/s1600\/loaddll_bp.png\" alt=\"image\"\/><\/p>\n<p>  \u041c\u044b \u0442\u0430\u043a-\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.DoLoadDll(DebugEvent: TDebugEvent); begin   if Assigned(FLoadDll) then   begin     FLoadDll(Self, GetThreadIndex(DebugEvent.dwThreadId),       DebugEvent.LoadDll);     DoResumeAction;   end;   CloseHandle(DebugEvent.LoadDll.hFile); end; <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u0445\u044d\u043d\u0434\u043b \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u043d\u0430 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430).<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0430\u0434\u0440\u0435\u0441 \u0441 \u043f\u0443\u0442\u0435\u043c \u043a \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 DebugEvent.LoadDll.lpImageName \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043d\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u043c \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 ReadProcessMemory.<br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043d\u044e\u0430\u043d\u0441: \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u043a-\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0443\u0442\u0438, \u0442.\u0435. \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u0440\u0430\u0437\u0430.<br \/>  \u0422\u0440\u0435\u0442\u0438\u0439 \u043d\u044e\u0430\u043d\u0441: \u043f\u0443\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0432 Ansii \u0442\u0430\u043a \u0438 \u0432 Unicode \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435.<br \/>  \u041d\u0443 \u0438 \u043d\u0430 \u0437\u0430\u043a\u0443\u0441\u043a\u0443, \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \ud83d\ude42<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 TFWDebugerCore \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043c\u0435\u0442\u043e\u0434 GetDllName, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<br \/>  \u041a\u043b\u0430\u0441\u0441 TFWDebugerCore \u043d\u0430\u0441 \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442 \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f OnLoadDll, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnLoadDll(Sender: TObject; ThreadIndex: Integer;   Data: TLoadDLLDebugInfo); const   FormatStrKnownDLL = 'Load Dll at instance %p handle %d &quot;%s&quot;';   FormatStrUnknownDLL = 'Load unknown Dll at instance %p handle %d'; var   DllName: AnsiString;   IsUnicodeData: Boolean; begin   FCore.ContinueStatus := DBG_EXCEPTION_NOT_HANDLED;   IsUnicodeData := Data.fUnicode = 1;   DllName := FCore.GetDllName(Data.lpImageName, Data.lpBaseOfDll, IsUnicodeData);   if DllName &lt;&gt; '' then   begin     if IsUnicodeData then       Writeln(Format(FormatStrKnownDLL, [Data.lpBaseOfDll,         Data.hFile, PWideChar(@DllName[1])]))     else       Writeln(Format(FormatStrKnownDLL, [Data.lpBaseOfDll,         Data.hFile, PAnsiChar(@DllName[1])]));   end   else     Writeln(Format(FormatStrUnknownDLL, [Data.lpBaseOfDll, Data.hFile])); end; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 TFWDebugerCore.GetDllName() \u0438 (\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 fUnicode) \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 GetDllName \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 TFWDebugerCore.ReadData(AddrPrt, ResultPtr: Pointer; DataSize: Integer): Boolean; var   Dummy: DWORD; begin   Result := ReadProcessMemory(FProcessInfo.AttachedProcessHandle,     AddrPrt, ResultPtr, DataSize, Dummy) and (Integer(Dummy) = DataSize); end;   function TFWDebugerCore.ReadStringA(AddrPrt: Pointer;   DataSize: Integer): AnsiString; begin   SetLength(Result, DataSize);   if not ReadData(AddrPrt, @Result[1], DataSize) then     Result := ''; end;     function GetMappedFileNameA(hProcess: THandle; lpv: Pointer;     lpFilename: LPSTR; nSize: DWORD): DWORD; stdcall; external 'psapi.dll';   function TFWDebugerCore.GetDllName(lpImageName, lpBaseOfDll: Pointer;   var Unicode: Boolean): AnsiString; var   DllNameAddr: Pointer;   MappedName: array [0..MAX_PATH - 1] of AnsiChar; begin   if ReadData(lpImageName, @DllNameAddr, 4) then     Result := ReadStringA(DllNameAddr, MAX_PATH);   if Result = '' then   begin     if GetMappedFileNameA(FProcessInfo.AttachedProcessHandle,       lpBaseOfDll, @MappedName[0], MAX_PATH) &gt; 0 then     begin       Result := PAnsiChar(@MappedName[0]);       Unicode := False;     end;   end; end; <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0447\u0438\u0442\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (ReadData + ReadStringA), \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0431\u0435\u0440\u0435\u043c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetMappedFileNameA. \u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \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, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c, \u0434\u0430\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u043a\u043e\u0434.<\/p>\n<h4>CREATE_THREAD_DEBUG_EVENT<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u043d\u0438\u0442\u044c. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms679287(v=vs.85).aspx\">DebugEvent.CreateThread (CREATE_THREAD_DEBUG_INFO structure).<\/a><\/p>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 DebugEvent.CreateThread.hThread, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435.<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431 ID \u043d\u0438\u0442\u0438, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0441 \u043d\u0435\u0439 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Hardware Breakpoint), \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 OpenThread \u043f\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 ID. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0442\u0440\u0443\u0436\u0434\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438, \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0430\u0440\u044b ThreadID = ThreadHandle \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u044d\u0448\u0435.<\/p>\n<p>  \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.DoCreateThread(DebugEvent: TDebugEvent); begin   AddThread(DebugEvent.dwThreadId, DebugEvent.CreateThread.hThread);   if Assigned(FCreateThread) then   begin     FCreateThread(Self, GetThreadIndex(DebugEvent.dwThreadId),       DebugEvent.CreateThread);     DoResumeAction;   end; end; <\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0438\u0442\u0438 \u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043d\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442.<\/p>\n<h4>OUTPUT_DEBUG_STRING_EVENT:<\/h4>\n<p>  \u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OutputDebugString. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms680545(v=vs.85).aspx\">DebugEvent.DebugString (OUTPUT_DEBUG_STRING_INFO structure).<\/a><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.DoDebugString(DebugEvent: TDebugEvent); begin   if Assigned(FDebugString) then   begin     FDebugString(Self, GetThreadIndex(DebugEvent.dwThreadId),       DebugEvent.DebugString);     DoResumeAction;   end; end; <\/code><\/pre>\n<p>  \u0442.\u0435. \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043a\u0430\u043a \u043c\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0443\u0442\u044c \u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnDebugString(Sender: TObject; ThreadIndex: Integer;   Data: TOutputDebugStringInfo); begin   if Data.fUnicode = 1 then     Writeln('DebugString: ' + PWideChar(FCore.ReadStringW(Data.lpDebugStringData,       Data.nDebugStringLength)))   else     Writeln('DebugString: ' + PAnsiChar(FCore.ReadStringA(Data.lpDebugStringData,       Data.nDebugStringLength))); end; <\/code><\/pre>\n<p>  \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Data.fUnicode \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f\u0434\u0440\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 ReadString\u0425().<\/p>\n<h4>UNLOAD_DLL_DEBUG_EVENT, EXIT_THREAD_DEBUG_EVENT, EXIT_PROCESS_DEBUG_EVENT, RIP_EVENT:<\/h4>\n<p>  \u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043d\u0438\u0442\u0438, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u044f\u0434\u0440\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u044f \u043f\u0440\u043e\u043f\u0443\u0449\u0443. \u0412 \u043d\u0438\u0445 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u044d\u043a\u0441\u0442\u0440\u0430\u043e\u0440\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0447\u0438\u0441\u0442\u044f\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c.<br \/>  \u041d\u044e\u0430\u043d\u0441\u044b \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<h4>EXCEPTION_DEBUG_EVENT:<\/h4>\n<p>  \u0412\u0441\u0435 \u0432\u043e\u0441\u0435\u043c\u044c \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u0442\u043e\u0440\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f EXCEPTION_DEBUG_EVENT.<br \/>  \u0415\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0434\u0443\u0442 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms679326(v=vs.85).aspx\">DebugEvent.Exception (EXCEPTION_DEBUG_INFO structure)<\/a>.<\/p>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0435\u043a\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0442\u0438\u043f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 DebugEvent.Exception.ExceptionRecord.ExceptionCode. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a (SEH)? \u0412\u043e\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u044d\u0442\u043e \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438\u0437-\u0437\u0430 \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0412\u0420.<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441: \u0415\u0441\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u043c\u044b \u0435\u0435 \u0442\u0430\u043a-\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0412\u0420 (\u043d\u0443 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0412\u0420 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f, \u0442.\u043a. \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0412\u0420).<\/p>\n<ol>\n<li>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0412\u0420 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430.<\/li>\n<li>\u0412\u0420 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 (Memory Breakpoint \u0438\u043b\u0438 \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 Data Preakpoint \u0432 Delphi).<\/li>\n<li>Hardware BP (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 Delphi).<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"delphi\">EXCEPTION_DEBUG_EVENT: begin   ThreadIndex := GetThreadIndex(DebugEvent.dwThreadId);   case DebugEvent.Exception.ExceptionRecord.ExceptionCode of       EXCEPTION_BREAKPOINT:       ProcessExceptionBreakPoint(ThreadIndex, DebugEvent);       EXCEPTION_SINGLE_STEP:       ProcessExceptionSingleStep(ThreadIndex, DebugEvent);       EXCEPTION_GUARD_PAGE:       ProcessExceptionGuardPage(ThreadIndex, DebugEvent);     else     CallUnhandledExceptionEvents(ThreadIndex, CodeDataToExceptionCode(       DebugEvent.Exception.ExceptionRecord.ExceptionCode), DebugEvent);   end; end; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0430\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0412\u0420 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u043b\u043e\u0433\u0438\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f EXCEPTION_DEBUG_EVENT.<\/p>\n<p>  <b>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430:<\/b><\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0412\u0420 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u043f\u043a\u043e\u0434\u0430 0xCC \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0412\u0420, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u00abINT3\u00bb.<\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u043f\u043a\u043e\u0434 0xCD03, \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437 \u0441\u0435\u0431\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u00abINT3\u00bb. \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0430\u043c\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f\u0434\u0435\u0440\u043d\u044b\u0439 _KiTrap03() \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u043c \u043e\u043f\u043a\u043e\u0434\u043e\u043c \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439.<\/p>\n<p>  \u041d\u043e, \u0432\u0441\u0435 \u044d\u0442\u043e \u043b\u0438\u0440\u0438\u043a\u0430, \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u043a\u043e\u0434.<\/p>\n<p>  \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0412\u0420 \u043a\u043b\u0430\u0441\u0441 TFWDebugerCore \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">\/\/ \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0434\u0430\u043b\u0435\u0435 \u0412\u0420)   TBreakpointType = (   btBreakpoint,           \/\/ WriteProcessMemoryEx + 0xCC   btMemoryBreakpoint      \/\/ VirtualProtectEx + PAGE_GUARD );   \/\/ \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0412\u0420   TInt3Breakpoint = record   Address: Pointer;   ByteCode: Byte; end;   TMemotyBreakPoint = record   Address: Pointer;   Size: DWORD;   BreakOnWrite: Boolean;   RegionStart: Pointer;   RegionSize: DWORD;   PreviosRegionProtect: DWORD; end;   TBreakpoint = packed record   bpType: TBreakpointType;   Description: ShortString;   Active: Boolean;   case Integer of     0: (Int3: TInt3Breakpoint;);     1: (Memory: TMemotyBreakPoint); end;   TBreakpointList = array of TBreakpoint; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0412\u0420 \u043e\u043d \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c TBreakpoint, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044f \u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0435 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0412\u0420 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u043e\u0434\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430\u0434\u0440\u0435\u0441 \u0412\u0420 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u0442\u0440\u0435\u043c \u0435\u0433\u043e \u043e\u043f\u043a\u043e\u0434\u043e\u043c 0xCC.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0412\u0420 \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">function TFWDebugerCore.SetBreakpoint(Address: DWORD;   const Description: string): Boolean; var   Breakpoint: TBreakpoint;   OldProtect: DWORD;   Dummy: DWORD; begin   ZeroMemory(@Breakpoint, SizeOf(TBreakpoint));   Breakpoint.bpType := btBreakpoint;   Breakpoint.Int3.Address := Pointer(Address);   Breakpoint.Description := Description;   Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,     Pointer(Address), 1, PAGE_READWRITE, OldProtect));   try     Check(ReadProcessMemory(FProcessInfo.AttachedProcessHandle,       Pointer(Address), @Breakpoint.Int3.ByteCode, 1, Dummy));     Check(WriteProcessMemory(FProcessInfo.AttachedProcessHandle,       Pointer(Address), @BPOpcode, 1, Dummy));   finally     Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,       Pointer(Address), 1, OldProtect, OldProtect));   end;   Result := AddNewBreakPoint(Breakpoint); end; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u0412\u0420, \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0430, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0412\u0420, \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f 0xCC \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 BPOpcode \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c VirtualProtectEx(). \u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043e\u0448\u0438\u0431\u043e\u043a, \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0412\u0420 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435:<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0412\u0420 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0441\u0432\u043e\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u00abINT3\u00bb. \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 EXCEPTION_DEBUG_EVENT \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_BREAKPOINT.<\/p>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043d\u0430\u043c \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms679326(v=vs.85).aspx\">DebugEvent.Exception.ExceptionRecord (EXCEPTION_DEBUG_INFO structure).<\/a><\/p>\n<p>  \u041a\u0430\u043a \u044f \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0430\u043d\u0435\u0435, \u0412\u0420 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0438 \u0441\u0430\u043c\u0438\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0437\u0430 \u0412\u0420 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b?<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041f\u0440\u043e\u0431\u0435\u0436\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u043d\u0435\u043c\u0443 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432 \u0430\u0434\u0440\u0435\u0441 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 DebugEvent.Exception.ExceptionRecord.ExceptionAddress \u0441 \u043f\u043e\u043b\u0435\u043c Address \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0442\u0438\u043f\u043e\u043c btBreakpoint, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u043b\u0438 \u043c\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0412\u0420 \u0438\u043b\u0438 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0447\u0442\u043e \u0412\u0420 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0448, \u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 (\u0434\u0430\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0442\u0443\u0442, \u0430 \u0434\u0430\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c) \u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \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>  <b>\u041f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0412\u0420:<\/b><\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u0412\u0420 \u043c\u044b \u0437\u0430\u0442\u0435\u0440\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-P8EQv02Ekdo\/UKpsnW0l8ZI\/AAAAAAAAAIU\/RDHEdBphOYI\/s1600\/before_set_int3.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/-VlIK6YOUoWM\/UKpst2Xkn1I\/AAAAAAAAAIc\/_1g4IuZGDWw\/s1600\/set_int3.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TBreakpoint \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Active, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043b\u0430\u0441\u0441 TFWDebugerCore \u0437\u043d\u0430\u0435\u0442 \u043e \u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 ToggleInt3Breakpoint, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u043b\u0430\u0433\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0412\u0420 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u0442\u0435\u0440\u0442\u044b\u0439 \u0431\u0430\u0439\u0442.<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.ToggleInt3Breakpoint(Index: Integer;   Active: Boolean); var   OldProtect: DWORD;   Dummy: DWORD; begin   CheckBreakpointIndex(Index);   if FBreakpointList[Index].bpType &lt;&gt; btBreakpoint then Exit;   if FBreakpointList[Index].Active = Active then Exit;   Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,     FBreakpointList[Index].Int3.Address, 1, PAGE_READWRITE, OldProtect));   try     if Active then       Check(WriteProcessMemory(FProcessInfo.AttachedProcessHandle,         FBreakpointList[Index].Int3.Address, @BPOpcode, 1, Dummy))     else       Check(WriteProcessMemory(FProcessInfo.AttachedProcessHandle,         FBreakpointList[Index].Int3.Address,         @FBreakpointList[Index].Int3.ByteCode, 1, Dummy));   finally     Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,       FBreakpointList[Index].Int3.Address, 1, OldProtect, OldProtect));   end;   FBreakpointList[Index].Active := Active; end; <\/code><\/pre>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043a\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0412\u0420 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0412\u0420 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 (\u0442.\u043a. \u043e\u043d \u043d\u0430\u043c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u044e\u0430\u043d\u0441: \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443. \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u00abINT3\u00bb \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0437\u0430\u0442\u0435\u0440\u0442\u044b\u0439 \u043d\u0430\u043c\u0438 \u0431\u0430\u0439\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x452220, \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 0x452221, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u00abmov ebp, esp\u00bb, \u0430 \u043d\u0435 \u0441 \u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u0431\u044b\u043b\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043d\u044e\u0430\u043d\u0441: \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0442\u0430\u0442\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438: \u00ab\u041d\u0443 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u0448\u044c \u2014 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u201epush ebp\u201c, \u043d\u0443 \u0443\u043f\u043b\u044b\u043b \u0441\u0442\u0435\u043a, \u043d\u043e \u043c\u044b \u0436\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0438 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e \u2014 \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0439\u0442\u0438 \u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u00a9\u00bb. \u0422\u0430\u043a-\u0442\u043e \u044d\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u0414\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c, \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0448\u0430\u043f\u043a\u0443 \u0441\u0442\u0435\u043a\u0430 \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u043d\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u044e\u043a, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e (\u0442\u043e\u0447\u043d\u0435\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442) \u043a\u0430\u043a \u043f\u0440\u044b\u0436\u043e\u043a \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435:<\/b><\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0442\u043e\u043c \u0447\u0442\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0441\u043c\u0430.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u043a\u0430\u043a \u00ab\u0434\u043b\u0438\u043d\u043d\u044b\u0439 NOP\u00bb. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0433\u043e\u0434\u0430 \u043f\u043e\u043b\u0442\u043e\u0440\u0430-\u0434\u0432\u0430 \u043d\u0430\u0437\u0430\u0434 \u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0438 \u0432 \u0438\u043d\u0442\u0435\u043b\u043e\u0432\u0441\u043a\u0438\u0445 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445, \u0433\u0434\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0442\u043e NOP (\u043f\u0443\u0441\u0442\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430) \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u043e\u043f\u043a\u043e\u0434\u0430 0x90. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e, \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u0432 \u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u043f\u043a\u043e\u0434\u043e\u043c. \u0414\u0430 \u0432\u043f\u0440\u043e\u0447\u0435\u043c \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u2014 \u044f \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043d\u043e\u043f\u044b.<\/p>\n<p>  \u0420\u0430\u0437 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u044e\u043a:<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u0440\u0435\u0445\u0431\u0430\u0439\u0442\u043d\u044b\u0439 NOP (\u043e\u043f\u043a\u043e\u0434 $0F, $1F, $00) \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">asm   db $0F, $1F, $00   xor eax, eax   inc eax   neg eax end; <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u043e \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-SKWULsRxcU0\/UKps4RKPAOI\/AAAAAAAAAIk\/fHnOKACL31g\/s1600\/inline1.png\" alt=\"image\"\/><\/p>\n<p>  \u041e\u043f\u043a\u043e\u0434\u044b \u0432\u0441\u0435\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432\u0435\u0440\u043d\u044b\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043e\u043d\u0438 \u0432\u0435\u0440\u043d\u043e, \u043d\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u041d\u0443 \u0438\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0436\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u044b\u0436\u043a\u0430. \u0417\u0434\u0435\u0441\u044c \u0438\u0434\u0435\u044f \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u0435\u0432\u044b\u0439 \u0431\u0430\u0439\u0442, \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00abjmp +1\u00bb \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u2014 \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0431\u0438\u0432\u0430\u0435\u0442 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0441 \u0442\u043e\u043b\u043a\u0443.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">asm    db $EB, $01   \/\/ jmp +1 (\u043f\u0440\u044b\u0436\u043e\u043a \u043d\u0430 xor \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f &quot;\u043b\u0435\u0432\u044b\u0439 \u0431\u0430\u0439\u0442&quot;)    db $B8        \/\/ \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c &quot;\u043b\u0435\u0432\u044b\u0439&quot; \u0431\u0430\u0439\u0442    xor eax, eax  \/\/ \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434    inc eax    neg eax    not eax    sub edx, eax    imul eax, edx    nop    nop end; <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/-t38zOyZ_buw\/UKps9mpxaEI\/AAAAAAAAAIs\/FJtPjoWCcco\/s1600\/inline2.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u043c\u0443\u0441\u043e\u0440, \u0447\u0442\u043e \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044f \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b: \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0412\u0420 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x452220, \u0430 \u043d\u0430 \u0434\u0435\u0432\u044f\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u0430\u043b\u044c\u0448\u0435, \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00abpush $00452245\u00bb.<\/p>\n<p>  \u042d\u0442\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0439 \u00abpush epb\u00bb \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u044f\u0442\u0438 \u0431\u0430\u0439\u0442. \u0414\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0442\u0435\u0440\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0442\u043e \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u043d\u0435 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0441 \u0435\u0435 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b, \u0438 \u0442\u0443\u0442 \u0443\u0436\u0435 \u043e\u0448\u0438\u0431\u0435\u0442\u0441\u044f \u043d\u0435 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-HyeMVcL80rw\/UKptFFFzukI\/AAAAAAAAAI0\/R0f6GbFREz4\/s1600\/inline_int3.png\" alt=\"image\"\/><\/p>\n<p>  \u0422.\u0435. \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u00abpush $00452245\u00bb \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00abinc epb\u00bb \u0438 \u00aband al, [ebp+$00]\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0434\u0435\u0441\u044c \u0438 \u0440\u044f\u0434\u043e\u043c \u043d\u0435 \u0441\u0442\u043e\u044f\u043b\u043e. \u0410 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443-\u0442\u0440\u043e\u0439\u043a\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0435\u0440\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u0410\u0434\u0440\u0435\u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, \u0445\u0440\u0430\u043d\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EIP (Extended Instruction Pointer). \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0438\u0442\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EIP \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetThreadContext, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 Context.Eip, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SetThreadContext.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441: \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f EXCEPTION_DEBUG_EVENT \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e ID \u043d\u0438\u0442\u0438 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 DebugEvent.dwThreadId, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetThreadContext() \u0438 SetThreadContext() \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0445\u044d\u043d\u0434\u043b \u043d\u0438\u0442\u0438, ID \u0438\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d. \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OpenThread, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f, \u0432\u0435\u0434\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0445\u044d\u043d\u0434\u043b\u043e\u0432 \u043d\u0438\u0442\u0435\u0439, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 ThreadID = ThreadHandle.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0437\u0430\u0442\u0435\u0440\u0442\u044b\u0439 \u0431\u0430\u0439\u0442, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u043c\u043e\u0436\u0435\u043c \u0434\u0430\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u041d\u041e. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0412\u0420, \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043e\u043f\u043a\u043e\u0434 0xCC \u0437\u0430\u043f\u0438\u0441\u044c \u043e \u0412\u0420 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u0430 \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043d\u0435\u0442? \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u043f\u0440\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0412\u0420 \u0438\u043b\u0438 \u0432 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u043d\u0430\u0434\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043d\u044f\u043b\u0438 \u0412\u0420. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0412\u0420 \u043d\u0430 \u0441\u0432\u043e\u0435 \u0437\u0430\u043a\u043e\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>  \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e, \u043d\u0443 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0412\u0420 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u043d\u043e \u044d\u0442\u043e \u0436 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u0438\u043d, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0412\u0420 \u0438 \u0442.\u043f. \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0410 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438.<br \/>  \u0417\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 TF \u0444\u043b\u0430\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u00abINT1\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044e EXCEPTION_DEBUG_EVENT \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_SINGLE_STEP.<\/p>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0438\u0442\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u0435\u043d\u044f\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EIP. \u0417\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Context.EFlags. \u0424\u043b\u0430\u0433 TF \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0432\u043e\u0441\u044c\u043c\u043e\u043c \u0431\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0422.\u0435. \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0434\u043b\u044f \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"delphi\">const   EFLAGS_TF = $100; \/\/ 8-\u043e\u0439 \u0431\u0438\u0442 ...   Context.EFlags := Context.EFlags or EFLAGS_TF; <\/code><\/pre>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438: \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u00abINT1\u00bb \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 TF \u0444\u043b\u0430\u0433. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0412\u0420, \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u0438\u0431\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 TF \u0444\u043b\u0430\u0433\u0430 \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 EXCEPTION_SINGLE_STEP \u0437\u0430\u043d\u043e\u0432\u043e \u0432\u0437\u0432\u043e\u0434\u0438\u0442\u044c TF \u0444\u043b\u0430\u0433. \u042d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0412\u0420 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0434\u0430 \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<ul>\n<li>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0412\u0420, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0435\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u043f\u043a\u043e\u0434 0xCC \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0412\u0420 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/li>\n<li>\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_BREAKPOINT, \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0439\u0442<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EIP \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u043b\u0430\u0433\u0430 TF<\/li>\n<li>\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_SINGLE_STEP <\/li>\n<li>\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043f\u043a\u043e\u0434 0xCC \u043d\u0430 \u043c\u0435\u0441\u0442\u043e.<\/li>\n<\/ul>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0438\u043c\u0435\u0435\u0442\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 F7 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 Delphi \ud83d\ude42<\/p>\n<p>  \u041d\u0443 \u0430 \u0432\u043e\u0442 \u0442\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 TFWDebugerCore.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_BREAKPOINT:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.ProcessExceptionBreakPoint(ThreadIndex: Integer;   DebugEvent: TDebugEvent); var   ReleaseBP: Boolean;   BreakPointIndex: Integer; begin   ReleaseBP := False;   BreakPointIndex := GetBPIndex(     DWORD(DebugEvent.Exception.ExceptionRecord.ExceptionAddress));   if BreakPointIndex &gt;= 0 then   begin     if Assigned(FBreakPoint) then       FBreakPoint(Self, ThreadIndex,         DebugEvent.Exception.ExceptionRecord, BreakPointIndex,         ReleaseBP)     else       CallUnhandledExceptionEvents(ThreadIndex, ecBreakpoint, DebugEvent);       ToggleInt3Breakpoint(BreakPointIndex, False);     SetSingleStepMode(ThreadIndex, True);     if ReleaseBP then       RemoveBreakpoint(BreakPointIndex)     else       FRestoreBPIndex := BreakPointIndex;   end   else     CallUnhandledExceptionEvents(ThreadIndex, ecBreakpoint, DebugEvent); end; <\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0449\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0412\u0420 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 ExceptionAddress.<br \/>  \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435.<br \/>  \u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0412\u0420 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 ToggleInt3Breakpoint.<br \/>  \u041f\u0440\u0430\u0432\u0438\u043c EIP \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 SetSingleStepMode.<br \/>  \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u043a\u0430\u0437\u0430\u043b \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0441\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0412\u0420 \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c RemoveBreakpoint.<br \/>  \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0442\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0412\u0420 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 EXCEPTION_SINGLE_STEP, \u0433\u0434\u0435 \u043e\u043d \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0412\u0420 \u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<p>  \u041a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 SetSingleStepMode \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\">procedure TFWDebugerCore.SetSingleStepMode(ThreadIndex: Integer;   RestoreEIPAfterBP: Boolean); var   Context: TContext; begin   ZeroMemory(@Context, SizeOf(TContext));   Context.ContextFlags := CONTEXT_FULL;   Check(GetThreadContext(FThreadList[ThreadIndex].ThreadHandle, Context));   if RestoreEIPAfterBP then     Dec(Context.Eip);   Context.EFlags := Context.EFlags or EFLAGS_TF;   Check(SetThreadContext(FThreadList[ThreadIndex].ThreadHandle, Context)); end; <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0438\u0442\u0438, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 \u0444\u043b\u0430\u0433 CONTEXT_FULL.<br \/>  \u041f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EIP<br \/>  \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c TF \u0444\u043b\u0430\u0433.<br \/>  \u0418 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 RemoveBreakpoint \u0435\u0449\u0435 \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.RemoveBreakpoint(Index: Integer); var   Len: Integer; begin   ToggleBreakpoint(Index, False);   Len := BreakpointCount;   if Len = 1 then     SetLength(FBreakpointList, 0)   else   begin     FBreakpointList[Index] := FBreakpointList[Len - 1];     SetLength(FBreakpointList, Len - 1);   end; end; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0412\u0420 \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0412\u0420 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_SINGLE_STEP \u044f \u043f\u043e\u043a\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442.\u043a. \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0412\u0420. \u0415\u0433\u043e \u043f\u043e\u043a\u0430\u0436\u0443 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0412\u0420 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438:<\/h4>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0412\u0420 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u043a Memory Breakpoint (\u0434\u0430\u043b\u0435\u0435 MBP).<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0432\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. (\u0441\u043c. \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<a href=\"http:\/\/rouse.drkb.ru\/winapi.php#pmm\"> \u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a>). \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c MBP \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0439 \u0444\u043b\u0430\u0433 PAGE_GUARD \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 VirtualProtectEx.<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441: \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0438 \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c VirtualProtectEx \u043f\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u0441 \u043d\u0438\u043c \u0431\u0430\u0439\u0442\u0430\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043d\u044e\u0430\u043d\u0441: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0434\u0430\u044e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0432\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 MBP \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0438\u0446\u044b. \u041e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c: \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 MBP \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u043b\u044f Protect \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0438\u043c\u0430\u0442\u044c MBP. \u0412 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d MBP \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0435\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b. \u0414\u0430\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 TFWDebugerCore \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e MBP \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0435\u0441\u0442\u044c \u043b\u0438 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d MBP \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u0443 \u043d\u0435\u0433\u043e \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 PreviosRegionProtect, \u0435\u0441\u043b\u0438 \u0436\u0435 \u041c\u0412\u0420 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 VirtualProtectEx.<\/p>\n<p>  \u041a\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u041c\u0412\u0420 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">function TFWDebugerCore.SetMemoryBreakpoint(Address: Pointer; Size: DWORD;   BreakOnWrite: Boolean; const Description: string): Boolean; var   Breakpoint: TBreakpoint;   MBI: TMemoryBasicInformation;   Index: Integer; begin   Index := GetMBPIndex(DWORD(Address));   if (Index &gt;= 0) and (FBreakpointList[Index].bpType = btMemoryBreakpoint) then   begin     MBI.BaseAddress := FBreakpointList[Index].Memory.RegionStart;     MBI.RegionSize := FBreakpointList[Index].Memory.RegionSize;     MBI.Protect := FBreakpointList[Index].Memory.PreviosRegionProtect;   end   else     Check(VirtualQueryEx(DebugProcessData.AttachedProcessHandle,       Address, MBI, SizeOf(TMemoryBasicInformation)) &gt; 0);   ZeroMemory(@Breakpoint, SizeOf(TBreakpoint));   Breakpoint.bpType := btMemoryBreakpoint;   Breakpoint.Description := ShortString(Description);   Breakpoint.Memory.Address := Address;   Breakpoint.Memory.Size := Size;   Breakpoint.Memory.BreakOnWrite := BreakOnWrite;   Breakpoint.Memory.RegionStart := MBI.BaseAddress;   Breakpoint.Memory.RegionSize := MBI.RegionSize;   Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,     Address, Size, MBI.Protect or PAGE_GUARD,     Breakpoint.Memory.PreviosRegionProtect));   if Index &gt;= 0 then     Breakpoint.Memory.PreviosRegionProtect := MBI.Protect;   Result := AddNewBreakPoint(Breakpoint); end; <\/code><\/pre>\n<p>  \u0414\u043b\u044f MBP \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0412\u0420. \u041f\u043e\u043c\u0438\u043c\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0430\u043c \u041c\u0412\u0420 \u2014 BreakOnWrite, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043d\u0435\u0435). \u0422\u0430\u043a \u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u041c\u0412\u0420 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 EXCEPTION_DEBUG_EVENT \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EXCEPTION_GUARD_PAGE.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a-\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u043b\u0430\u0433 PAGE_GUARD \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043a \u043d\u0435\u0439 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0412\u0420 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u041c\u0412\u0420 \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 EXCEPTION_GUARD_PAGE \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u041c\u0412\u0420, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433 PAGE_GUARD \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u041c\u0412\u0420 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>  \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.ProcessExceptionGuardPage(ThreadIndex: Integer;   DebugEvent: TDebugEvent); var   CurrentMBPIndex: Integer;     function CheckWriteMode: Boolean;   begin     Result := not FBreakpointList[CurrentMBPIndex].Memory.BreakOnWrite;     if not Result then       Result := DebugEvent.Exception.ExceptionRecord.ExceptionInformation[0] = 1;   end;   var   MBPIndex: Integer;   ReleaseMBP: Boolean;   dwGuardedAddr: DWORD; begin   ReleaseMBP := False;   dwGuardedAddr :=     DebugEvent.Exception.ExceptionRecord.ExceptionInformation[1];   MBPIndex := GetMBPIndex(dwGuardedAddr);   if MBPIndex &gt;= 0 then   begin     CurrentMBPIndex := MBPIndex;     while not CheckIsAddrInRealMemoryBPRegion(CurrentMBPIndex, dwGuardedAddr) do     begin       CurrentMBPIndex := GetMBPIndex(dwGuardedAddr, CurrentMBPIndex + 1);       if CurrentMBPIndex &lt; 0 then Break;     end;       if CurrentMBPIndex &gt;= 0 then     begin       MBPIndex := CurrentMBPIndex;       if Assigned(FBreakPoint) and CheckWriteMode then         FBreakPoint(Self, ThreadIndex,           DebugEvent.Exception.ExceptionRecord, MBPIndex, ReleaseMBP)       else         CallUnhandledExceptionEvents(ThreadIndex, ecGuard, DebugEvent);     end     else       CallUnhandledExceptionEvents(ThreadIndex, ecGuard, DebugEvent);       FBreakpointList[MBPIndex].Active := False;     SetSingleStepMode(ThreadIndex, False);     if ReleaseMBP then       RemoveBreakpoint(MBPIndex)     else       FRestoreMBPIndex := MBPIndex;   end   else     CallUnhandledExceptionEvents(ThreadIndex, ecGuard, DebugEvent); end; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 ExceptionRecord.ExceptionInformation \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438\u0434\u0435\u0442 \u0444\u043b\u0430\u0433 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u043e\u043b\u044c \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0449\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u041c\u0412\u0420 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 CheckIsAddrInRealMemoryBPRegion \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u041c\u0412\u0420 \u0437\u043e\u043d\u0443.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043d\u0430\u0448\u0435\u043b\u0441\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 BreakOnWrite.<br \/>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 ExceptionInformation. \u0415\u0441\u043b\u0438 BreakOnWrite \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432 ExceptionInformation \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 BreakOnWrite \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u0432\u044b\u0437\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0412\u0420, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0412\u0420 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EIP. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 SetSingleStepMode \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f False.<\/p>\n<p>  \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u044f\u0442\u043e\u0433\u043e \u041c\u0412\u0420 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 EXCEPTION_SINGLE_STEP \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 FRestoreMBPIndex.<\/p>\n<p>  \u0417\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u041c\u0412\u0420 \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\">procedure TFWDebugerCore.ToggleMemoryBreakpoint(Index: Integer;   Active: Boolean); var   Dummy: DWORD; begin   CheckBreakpointIndex(Index);   if FBreakpointList[Index].bpType &lt;&gt; btMemoryBreakpoint then Exit;   if FBreakpointList[Index].Active = Active then Exit;   if Active then     Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,       FBreakpointList[Index].Memory.Address,       FBreakpointList[Index].Memory.Size,       FBreakpointList[Index].Memory.PreviosRegionProtect or PAGE_GUARD, Dummy))   else     Check(VirtualProtectEx(FProcessInfo.AttachedProcessHandle,       FBreakpointList[Index].Memory.Address,       FBreakpointList[Index].Memory.Size,       FBreakpointList[Index].Memory.PreviosRegionProtect, Dummy));   FBreakpointList[Index].Active := Active; end; <\/code><\/pre>\n<p>  \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u041c\u0412\u0420 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u043c-\u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0447\u0442\u043e \u0438 \u0412\u0420.<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u044b \u043d\u044e\u0430\u043d\u0441\u043e\u0432, \u0443 \u0412\u0420 \u0438 \u041c\u0412\u0420 \u043d\u0435\u0442. \u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u043e\u0433\u0434\u0430 \u041c\u0412\u0420 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0414\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u041c\u0411\u0420 \u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043d\u0430\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438 \u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e EIP \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u0436\u0430\u043b\u044c \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c\u0430\u044f \u0432 Delphi \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0442\u0440\u0435\u0442\u044c\u0435\u043c\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0442\u0438\u043f\u0443 \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:<\/h4>\n<p>  \u0422\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 Hardware BreakPoint (\u0434\u0430\u043b\u0435\u0435 HBP). \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0412\u0420 \u0438 \u041c\u0412\u0420 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043b\u043e\u0445\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e, \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0438\u0442\u044c.<\/p>\n<p>  \u041d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u041d\u0412\u0420 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0438\u0431\u043a\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0421\u0440\u0430\u0432\u043d\u0438\u043c:<br \/>  \u0412\u0420 \u2014 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 (\u0441\u043a\u0430\u0436\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f)<br \/>  \u041c\u0412\u0420 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0427\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0427\u0442\u0435\u043d\u0438\u044f\/\u0417\u0430\u043f\u0438\u0441\u0438.<br \/>  \u041d\u0412\u0420 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e, \u043e\u043d \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c\u044b \u0417\u0430\u043f\u0438\u0441\u0438, \u0427\u0442\u0435\u043d\u0438\u044f\/\u0417\u0430\u043f\u0438\u0441\u0438, IO \u0440\u0435\u0436\u0438\u043c (\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0440\u0442\u0443 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430) \u0438 \u0440\u0435\u0436\u0438\u043c \u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422.\u0435. \u041d\u0412\u0420 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u0430\u043a \u0412\u0420 (\u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435) \u0442\u0430\u043a \u0438 \u041c\u0412\u0420 (\u0432 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0417\u0430\u043f\u0438\u0441\u044c \u2014 \u0427\u0442\u0435\u043d\u0438\u0435\/\u0417\u0430\u043f\u0438\u0441\u044c). \u041f\u0440\u0430\u0432\u0434\u0430 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u041c\u0412\u0420 \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442.\u043a. \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 1, 2 \u0438\u043b\u0438 4 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0412\u0420 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0438\u0442\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f DR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u0444\u043b\u0430\u0433\u0430 CONTEXT_DEBUG_REGISTERS.<br \/>  \u0412\u0441\u0435\u0433\u043e \u0438\u0445 \u0448\u0435\u0441\u0442\u044c. Dr0..Dr3, Dr6, Dr7. (Dr4 \u0438 Dr5 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b).<br \/>  \u041f\u0435\u0440\u0432\u044b\u0435 4 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0445\u0440\u0430\u043d\u044f\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u041d\u0412\u0420. \u0420\u0435\u0433\u0438\u0441\u0442\u0440 Dr7 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u041d\u0412\u0420. \u0420\u0435\u0433\u0438\u0441\u0442\u0440 Dr6 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u041d\u0412\u0420.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 TFWDebugerCore \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u041d\u0412\u0420 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">THWBPIndex = 0..3; THWBPSize = (hsByte, hdWord, hsDWord); THWBPMode = (hmExecute, hmWrite, hmIO, hmReadWrite);   THardwareBreakpoint = packed record   Address: array [THWBPIndex] of Pointer;   Size: array [THWBPIndex] of THWBPSize;   Mode: array [THWBPIndex] of THWBPMode;   Description: array [THWBPIndex] of ShortString;   Active: array [THWBPIndex] of Boolean; end; <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 4 \u041d\u0412\u0420 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043d\u0438\u0442\u0438 \u0441\u0432\u043e\u0438, \u043e\u043d\u0438 \u043d\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0412\u0420 \u043a\u043b\u0430\u0441\u0441\u0430.<br \/>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u0435\u0449\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0438\u0442\u044f\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u044b ID = hThreadHandle. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \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\">TThreadData = record   ThreadID: DWORD;   ThreadHandle: THandle;   Breakpoint: THardwareBreakpoint; end; TThreadList = array of TThreadData; <\/code><\/pre>\n<p>  \u0422.\u0435. \u043f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0432\u043e\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0435\u0439 \u041d\u0412\u0420.<\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u041d\u0412\u0420 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.SetHardwareBreakpoint(ThreadIndex: Integer;   Address: Pointer; Size: THWBPSize; Mode: THWBPMode;   HWIndex: THWBPIndex; const Description: string); begin   if ThreadIndex &lt; 0 then Exit;   FThreadList[ThreadIndex].Breakpoint.Address[HWIndex] := Address;   FThreadList[ThreadIndex].Breakpoint.Size[HWIndex] := Size;   FThreadList[ThreadIndex].Breakpoint.Mode[HWIndex] := Mode;   FThreadList[ThreadIndex].Breakpoint.Description[HWIndex] :=     ShortString(Description);   FThreadList[ThreadIndex].Breakpoint.Active[HWIndex] := True;   UpdateHardwareBreakpoints(ThreadIndex); end; <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 UpdateHardwareBreakpoints.<\/p>\n<p>  \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.ToggleHardwareBreakpoint(ThreadIndex: Integer;   Index: THWBPIndex; Active: Boolean); begin   if ThreadIndex &lt; 0 then Exit;   if FThreadList[ThreadIndex].Breakpoint.Active[Index] = Active then Exit;   FThreadList[ThreadIndex].Breakpoint.Active[Index] := Active;   UpdateHardwareBreakpoints(ThreadIndex); end; <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u0444\u043b\u0430\u0433 Active \u0438 \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c UpdateHardwareBreakpoints.<\/p>\n<p>  \u041d\u0443 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.DropHardwareBreakpoint(ThreadIndex: Integer;   Index: THWBPIndex); begin   if ThreadIndex &lt; 0 then Exit;   if FThreadList[ThreadIndex].Breakpoint.Address[Index] = nil then Exit;   FThreadList[ThreadIndex].Breakpoint.Address[Index] := nil;   UpdateHardwareBreakpoints(ThreadIndex); end; <\/code><\/pre>\n<p>  \u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u041d\u0412\u0420 \u0438 \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c UpdateHardwareBreakpoints.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u043d\u044e\u0430\u043d\u0441 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 UpdateHardwareBreakpoints.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b Dr0-Dr3 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u041d\u0412\u0420 \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7.<\/p>\n<p>  \u0412\u043e\u0442 \u0441 \u043d\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u041d\u0412\u0420 \u0438 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \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<p>  \u0421\u0430\u043c\u044b\u0435 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 (31-28) \u0445\u0440\u0430\u043d\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr3.<br \/>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  \u0421\u0442\u0430\u0440\u0448\u0438\u0435 2 \u0431\u0438\u0442\u0430 (LENi) \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u041d\u0412\u0420 \u043f\u0430\u043c\u044f\u0442\u0438.<br \/>  00 \u2014 1 \u0431\u0430\u0439\u0442<br \/>  01 \u2014 2 \u0431\u0430\u0439\u0442\u0430<br \/>  10 \u2014 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0431\u0438\u0442\u043e\u0432 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<br \/>  11 \u2014 4 \u0431\u0430\u0439\u0442\u0430<\/p>\n<p>  \u041c\u043b\u0430\u0434\u0448\u0438\u0435 2 \u0431\u0438\u0442\u0430 (RWi) \u0438\u0437 4 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u041d\u0412\u0420<br \/>  00 \u2014 Execute<br \/>  01 \u2014 Write<br \/>  10 \u2014 IO Read\/Write<br \/>  11 \u2014 Read\/Write<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0447\u0442\u043e\u0431\u044b \u041d\u0412\u0420 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr3 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043b\u044e\u0431\u044b\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 Dr3, \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a 1101.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 4 \u0431\u0438\u0442\u0430 (27-24) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0412\u0420 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr2<br \/>  \u0411\u0438\u0442\u044b 23-20 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a Dr1 \u0438, \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435, \u0431\u0438\u0442\u044b 19-16 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 Dr0.<\/p>\n<p>  \u0411\u0438\u0442 13 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7 (GD \u2014 Global Debug Register Access Detect) \u2014 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u0434\u0440\u0443\u0433 \u0432\u0437\u0434\u0443\u043c\u0430\u043b\u043e\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u044d\u0442\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>  \u0411\u0438\u0442 9 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7 (GE \u2014 Global Exact data breakpoint match) \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u041d\u0412\u0420.<br \/>  \u0411\u0438\u0442 8 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7 (LE \u2014 Local Exact data breakpoint match) \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u041d\u0412\u0420.<\/p>\n<p>  LE \u0431\u0438\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447, \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u043b\u043e\u0432\u0441\u043a\u0438\u0445 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c 8 \u0431\u0438\u0442 (7-0) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u044b \u0444\u043b\u0430\u0433\u043e\u0432 Gi \u0438 Li \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 HBP \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>  \u0411\u0438\u0442 7 (Gi \u2014 Global breakpoint enable) \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 Dr3<br \/>  \u0411\u0438\u0442 6 (Li \u2014 Local breakpoint enable) \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 Dr3<br \/>  5- 4 \u0442\u043e \u0436\u0435 \u0434\u043b\u044f Dr2<br \/>  3- 2 \u0434\u043b\u044f Dr1 \u0438 1-0 \u0434\u043b\u044f Dr0<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0442\u0430\u043b\u0438\u0441\u044c?<\/p>\n<p>  \u041d\u0443 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/-M9HKvLxS3FU\/UKptR0WtY_I\/AAAAAAAAAI8\/FYMAdzhXv08\/s1600\/image002.gif\" alt=\"image\"\/><\/p>\n<p>  \u0412 \u0432\u0438\u0434\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.UpdateHardwareBreakpoints(ThreadIndex: Integer); const   DR7_SET_LOC_DR0 = $01;   DR7_SET_GLB_DR0 = $02;   DR7_SET_LOC_DR1 = $04;   DR7_SET_GLB_DR1 = $08;   DR7_SET_LOC_DR2 = $10;   DR7_SET_GLB_DR2 = $20;   DR7_SET_LOC_DR3 = $40;   DR7_SET_GLB_DR3 = $80;     DR7_SET_LOC_ON  = $100;   DR7_SET_GLB_ON  = $200;     DR7_PROTECT     = $2000;     DR_SIZE_BYTE    = 0;   DR_SIZE_WORD    = 1;   DR_SIZE_DWORD   = 3;     DR_MODE_E       = 0;   DR_MODE_W       = 1;   DR_MODE_I       = 2;   DR_MODE_R       = 3;     DR7_MODE_DR0_E  = DR_MODE_E shl 16;   DR7_MODE_DR0_W  = DR_MODE_W shl 16;   DR7_MODE_DR0_I  = DR_MODE_I shl 16;   DR7_MODE_DR0_R  = DR_MODE_R shl 16;     DR7_SIZE_DR0_B  = DR_SIZE_BYTE shl 18;   DR7_SIZE_DR0_W  = DR_SIZE_WORD shl 18;   DR7_SIZE_DR0_D  = DR_SIZE_DWORD shl 18;     DR7_MODE_DR1_E  = DR_MODE_E shl 20;   DR7_MODE_DR1_W  = DR_MODE_W shl 20;   DR7_MODE_DR1_I  = DR_MODE_I shl 20;   DR7_MODE_DR1_R  = DR_MODE_R shl 20;     DR7_SIZE_DR1_B  = DR_SIZE_BYTE shl 22;   DR7_SIZE_DR1_W  = DR_SIZE_WORD shl 22;   DR7_SIZE_DR1_D  = DR_SIZE_DWORD shl 22;     DR7_MODE_DR2_E  = DR_MODE_E shl 24;   DR7_MODE_DR2_W  = DR_MODE_W shl 24;   DR7_MODE_DR2_I  = DR_MODE_I shl 24;   DR7_MODE_DR2_R  = DR_MODE_R shl 24;     DR7_SIZE_DR2_B  = DR_SIZE_BYTE shl 26;   DR7_SIZE_DR2_W  = DR_SIZE_WORD shl 26;   DR7_SIZE_DR2_D  = DR_SIZE_DWORD shl 26;     DR7_MODE_DR3_E  = DR_MODE_E shl 28;   DR7_MODE_DR3_W  = DR_MODE_W shl 28;   DR7_MODE_DR3_I  = DR_MODE_I shl 28;   DR7_MODE_DR3_R  = DR_MODE_R shl 28;     DR7_SIZE_DR3_B  = DR_SIZE_BYTE shl 30;   DR7_SIZE_DR3_W  = DR_SIZE_WORD shl 30;   DR7_SIZE_DR3_D  = $C0000000; \/\/DR_SIZE_DWORD shl 30;     DR_On: array [THWBPIndex] of DWORD = (     DR7_SET_LOC_DR0,     DR7_SET_LOC_DR1,     DR7_SET_LOC_DR2,     DR7_SET_LOC_DR3   );     DR_Mode: array [THWBPIndex] of array [THWBPMode] of DWORD = (     (DR7_MODE_DR0_E, DR7_MODE_DR0_W, DR7_MODE_DR0_I, DR7_MODE_DR0_R),     (DR7_MODE_DR1_E, DR7_MODE_DR1_W, DR7_MODE_DR1_I, DR7_MODE_DR1_R),     (DR7_MODE_DR2_E, DR7_MODE_DR2_W, DR7_MODE_DR2_I, DR7_MODE_DR2_R),     (DR7_MODE_DR3_E, DR7_MODE_DR3_W, DR7_MODE_DR3_I, DR7_MODE_DR3_R)   );     DR_Size: array [THWBPIndex] of array [THWBPSize] of DWORD = (     (DR7_SIZE_DR0_B, DR7_SIZE_DR0_W, DR7_SIZE_DR0_D),     (DR7_SIZE_DR1_B, DR7_SIZE_DR1_W, DR7_SIZE_DR1_D),     (DR7_SIZE_DR2_B, DR7_SIZE_DR2_W, DR7_SIZE_DR2_D),     (DR7_SIZE_DR3_B, DR7_SIZE_DR3_W, DR7_SIZE_DR3_D)   );   var   Context: TContext;   I: THWBPIndex; begin   if ThreadIndex &lt; 0 then Exit;     ZeroMemory(@Context, SizeOf(TContext));   Context.ContextFlags := CONTEXT_DEBUG_REGISTERS;     for I := 0 to 3 do   begin     if not FThreadList[ThreadIndex].Breakpoint.Active[I] then Continue;     if FThreadList[ThreadIndex].Breakpoint.Address[I] &lt;&gt; nil then     begin       Context.Dr7 := Context.Dr7 or DR7_SET_LOC_ON;       case I of         0: Context.Dr0 := DWORD(FThreadList[ThreadIndex].Breakpoint.Address[I]);         1: Context.Dr1 := DWORD(FThreadList[ThreadIndex].Breakpoint.Address[I]);         2: Context.Dr2 := DWORD(FThreadList[ThreadIndex].Breakpoint.Address[I]);         3: Context.Dr3 := DWORD(FThreadList[ThreadIndex].Breakpoint.Address[I]);       end;       Context.Dr7 := Context.Dr7 or DR_On[I];       Context.Dr7 := Context.Dr7 or DR_Mode[I,         FThreadList[ThreadIndex].Breakpoint.Mode[I]];       Context.Dr7 := Context.Dr7 or DR_Size[I,         FThreadList[ThreadIndex].Breakpoint.Size[I]];     end;   end;     Check(SetThreadContext(FThreadList[ThreadIndex].ThreadHandle, Context)); end; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434\u0443, \u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr7 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0442\u0440\u0435\u043c\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<pre><code class=\"delphi\">Context.Dr7 := Context.Dr7 or DR_On[I]; Context.Dr7 := Context.Dr7 or DR_Mode[I,   FThreadList[ThreadIndex].Breakpoint.Mode[I]]; Context.Dr7 := Context.Dr7 or DR_Size[I,   FThreadList[ThreadIndex].Breakpoint.Size[I]]; <\/code><\/pre>\n<p>  \u041d\u0443 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0430 LE \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 DR7_SET_LOC_ON.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u041d\u0412\u0420.<\/p>\n<p>  \u041f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0412\u0420 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u043a\u043e\u0434 EXCEPTION_BREAKPOINT.<br \/>  \u041f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u041c\u0412\u0420 \u043a\u043e\u0434 \u0431\u044b\u043b EXCEPTION_GUARD_PAGE.<br \/>  \u0410 \u043f\u0440\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u041d\u0412\u0420 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 EXCEPTION_DEBUG_EVENT \u0441 \u043a\u043e\u0434\u043e\u043c EXCEPTION_SINGLE_STEP, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0412\u0420 \u0438 \u041c\u0412\u0420 (\u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438).<\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 EXCEPTION_SINGLE_STEP \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u041d\u0412\u0420 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\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\">function TFWDebugerCore.ProcessHardwareBreakpoint(ThreadIndex: Integer;   DebugEvent: TDebugEvent): Boolean; var   Index: Integer;   Context: TContext;   ReleaseBP: Boolean; begin   ZeroMemory(@Context, SizeOf(TContext));   Context.ContextFlags := CONTEXT_DEBUG_REGISTERS;   Check(GetThreadContext(FThreadList[ThreadIndex].ThreadHandle, Context));   Result := Context.Dr6 and $F &lt;&gt; 0;   if not Result then Exit;     Index := -1;   if Context.Dr6 and 1 &lt;&gt; 0 then     Index := 0;   if Context.Dr6 and 2 &lt;&gt; 0 then     Index := 1;   if Context.Dr6 and 4 &lt;&gt; 0 then     Index := 2;   if Context.Dr6 and 8 &lt;&gt; 0 then     Index := 3;   if Index &lt; 0 then   begin     Result := False;     Exit;   end;     ReleaseBP := False;     if Assigned(FHardwareBreakpoint) then     FHardwareBreakpoint(Self, ThreadIndex, DebugEvent.Exception.ExceptionRecord,       Index, ReleaseBP);     ToggleHardwareBreakpoint(ThreadIndex, Index, False);   SetSingleStepMode(ThreadIndex, False);     if ReleaseBP then     DropHardwareBreakpoint(ThreadIndex, Index)   else   begin       \/\/ \u0435\u0441\u043b\u0438 \u0434\u0432\u0430 HWBP \u0438\u0434\u0443\u0442 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c,     \/\/ \u0442\u043e \u0442.\u043a. \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u044b     \/\/ \u0432 ProcessExceptionSingleStep, \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e HWBP \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0442\u0435\u0440\u0442     \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 HWBP     if (FRestoredThread &gt;= 0) and (FRestoredHWBPIndex &gt;= 0) then       ToggleHardwareBreakpoint(FRestoredThread, FRestoredHWBPIndex, True);       FRestoredHWBPIndex := Index;     FRestoredThread := ThreadIndex;   end; end; <\/code><\/pre>\n<p>  \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u041d\u0412\u0420 \u0432\u044b\u0437\u0432\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u0412\u0420 \u0438 \u041c\u0412\u0420.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u041d\u0412\u0420 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 Dr6 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0438\u0442\u0438.<br \/>  \u041c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u043c DrX \u0440\u0435\u0433\u0438\u0441\u0442\u0440.<\/p>\n<p>  \u0412\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u041d\u0412\u0420 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u041d\u0412\u0420, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 (\u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u043a\u0438 EIP) \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043b\u0438\u0431\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u041d\u0412\u0420, \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a EXCEPTION_SINGLE_STEP \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u041d\u0412\u0420.<\/p>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436, \u0432\u043e\u0442 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u044b \u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e.<br \/>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 EXCEPTION_SINGLE_STEP.<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure TFWDebugerCore.ProcessExceptionSingleStep(ThreadIndex: Integer;   DebugEvent: TDebugEvent); var   Handled: Boolean; begin   \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c HWBP   Handled := ProcessHardwareBreakpoint(ThreadIndex, DebugEvent);     \/\/ \u0415\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u043e \u0438\u0437-\u0437\u0430 HWPB \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 HWBP   if not Handled and (FRestoredThread &gt;= 0) and     (FRestoredHWBPIndex &gt;= 0) then   begin     ToggleHardwareBreakpoint(FRestoredThread, FRestoredHWBPIndex, True);     FRestoredThread := -1;     FRestoredHWBPIndex := -1;   end;     \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0412\u0420   if FRestoreBPIndex &gt;= 0 then   begin     CheckBreakpointIndex(FRestoreBPIndex);     if FBreakpointList[FRestoreBPIndex].bpType = btBreakpoint then       ToggleInt3Breakpoint(FRestoreBPIndex, True);     FRestoreBPIndex := -1;   end;     \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c M\u0412\u0420   if FRestoreMBPIndex &gt;= 0 then   begin     CheckBreakpointIndex(FRestoreMBPIndex);     if FBreakpointList[FRestoreMBPIndex].bpType = btMemoryBreakpoint then       ToggleMemoryBreakpoint(FRestoreMBPIndex, True);     FRestoreMBPIndex := -1;   end;     \/\/ \u0435\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438   \/\/ \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u043c \u043e \u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f   if ResumeAction &lt;&gt; raRun then   begin     CallUnhandledExceptionEvents(ThreadIndex, ecSingleStep, DebugEvent);       \/\/ \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f     DoResumeAction(ThreadIndex);   end; end; <\/code><\/pre>\n<p>  \u0412 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0443 \u0432\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u041d\u0412\u0420. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a, \u0442\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c ToggleHardwareBreakpoint \u041d\u0412\u0420 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043e.<br \/>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0412\u0420 \u0438\u043b\u0438 \u041c\u0412\u0420, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 FRestoreBPIndex \u0438 FRestoreMBPIndex \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u043e.<br \/>  \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0435 \u0442\u0438\u043f\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 ToggleInt3Breakpoint \u0438\u043b\u0438 ToggleMemoryBreakpoint.<\/p>\n<h4>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430:<\/h4>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0443, \u043d\u043e \u043d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u0435\u0441\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<br \/>  \u041d\u0443 \u043a\u0430\u043a \u0432 \u0442\u043e\u043c \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u0435 \u043f\u0440\u043e \u0441\u0430\u043c\u043e\u043b\u0435\u0442: \u00ab\u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u0441\u044e \u044d\u0442\u0443 \u0431\u0430\u0439\u0434\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u00bb \ud83d\ude42<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 VCL \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00abtest_app\u00bb, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u043e\u0440\u043c\u044b, \u0434\u0432\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 ( \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438) \u0438 TMemo \u0438\u043b\u0438 TRichEdit, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u041f\u0438\u0448\u0435\u043c:<\/p>\n<pre><code class=\"delphi\">type   TdlgDebuger = class(TForm)     Panel1: TPanel;     btnStart: TButton;     btnStop: TButton;     edLog: TRichEdit;     procedure btnStartClick(Sender: TObject);     procedure btnStopClick(Sender: TObject);   private     FCore: TFWDebugerCore;     FNeedStop: Boolean;     procedure Writeln(const Value: string = '');   end;   ...   procedure TdlgDebuger.btnStartClick(Sender: TObject); var   Path: string; begin   FNeedStop := False;   \/\/ \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439   Path := ExtractFilePath(ParamStr(0)) + '..\\test_app\\test_app.exe';   FCore := TFWDebugerCore.Create(50);   try     btnStart.Enabled := False;     btnStop.Enabled := True;     if not FCore.DebugNewProcess(Path, True) then       RaiseLastOSError;     FCore.RunMainLoop;   finally     FCore.Free;     btnStart.Enabled := True;     btnStop.Enabled := False;   end;   Writeln;   Writeln('Debug stop'); end;   procedure TdlgDebuger.Writeln(const Value: string); begin   edLog.Lines.Add(Value); end;   procedure TdlgDebuger.btnStopClick(Sender: TObject); begin   FNeedStop := True; end;  <\/code><\/pre>\n<p>  \u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-oxIaWh8SIP0\/UKptZVOISLI\/AAAAAAAAAJE\/xr9hwmwrkJ0\/s1600\/dbg1.png\" alt=\"image\"\/><\/p>\n<p>  \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abStart\u00bb, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u044b\u0448\u043a\u0438 \u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 TFWDebugerCore.RunMainLoop, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0434\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0417\u0430\u043a\u0440\u043e\u0439\u0442\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0438 \u0434\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u043a\u043d\u043e\u043c.<\/p>\n<p>  \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0438\u0442\u0438 (\u0442\u043e\u0447\u043d\u0435\u0435 \u043d\u0435 \u043f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u2014 \u0430 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434) \u043d\u043e \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 OnIdle \u043a\u043b\u0430\u0441\u0441\u0430 TFWDebugerCore, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnIdle(Sender: TObject); begin   if FNeedStop then     FCore.StopDebug   else     Application.ProcessMessages; end; <\/code><\/pre>\n<p>  \u0412\u044b\u0437\u043e\u0432 Application.ProcessMessages \u043d\u0435 \u0434\u0430\u0441\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u0435\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a Delphi. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OnCreateProcess \u0438 OnLoadDll.<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnCreateProcess(Sender: TObject;   ThreadIndex: Integer; Data: TCreateProcessDebugInfo); var   T: TThreadData; begin   T := FCore.GetThreadData(ThreadIndex);   Writeln(Format('CreateThread ID: %d', [T.ThreadID]));   Writeln(Format('ProcessStart ID: %d', [FCore.DebugProcessData.ProcessID])); end; <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnLoadDll(Sender: TObject; ThreadIndex: Integer;   Data: TLoadDLLDebugInfo); const   FormatStrKnownDLL = 'Load Dll at instance %p handle %d &quot;%s&quot;';   FormatStrUnknownDLL = 'Load unknown Dll at instance %p handle %d'; var   DllName: AnsiString;   IsUnicodeData: Boolean; begin   FCore.ContinueStatus := DBG_EXCEPTION_NOT_HANDLED;   IsUnicodeData := Data.fUnicode = 1;   DllName := FCore.GetDllName(Data.lpImageName, Data.lpBaseOfDll, IsUnicodeData);   if DllName &lt;&gt; '' then   begin     if IsUnicodeData then       Writeln(Format(FormatStrKnownDLL, [Data.lpBaseOfDll,         Data.hFile, PWideChar(@DllName[1])]))     else       Writeln(Format(FormatStrKnownDLL, [Data.lpBaseOfDll,         Data.hFile, PAnsiChar(@DllName[1])]));   end   else     Writeln(Format(FormatStrUnknownDLL, [Data.lpBaseOfDll, Data.hFile])); end; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043f\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0436\u043c\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u00abStart\u00bb<\/p>\n<p>  \u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-IVcct2LHvr0\/UKpthMeYvyI\/AAAAAAAAAJM\/4zFbtbv8rfE\/s1600\/dbg2.png\" alt=\"image\"\/><\/p>\n<p>  \u041d\u0443 \u0432\u0440\u043e\u0434\u0435 \u2014 \u043f\u043e\u0445\u043e\u0436\u0435.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438:<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 TF \u0444\u043b\u0430\u0433, \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 MBP. \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 40 \u0431\u0430\u0439\u0442 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-QRQd2W8UtzQ\/UKptqJL5HXI\/AAAAAAAAAJU\/o4bLPlD7dfg\/s1600\/trace.png\" alt=\"image\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0412\u0420\/\u041c\u0412\u0420 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0412\u0420 \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DebugNewProcess. \u041e\u043d \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 True, \u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0412\u0420. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a OnBreakPoint \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnBreakPoint(Sender: TObject; ThreadIndex: Integer;   ExceptionRecord: Windows.TExceptionRecord; BreakPointIndex: Integer;   var ReleaseBreakpoint: Boolean); begin   \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0439\u043c\u0430\u043d\u043d\u044b\u0439 \u0412\u0420 \u0432 \u043b\u043e\u0433   Writeln(Format('!!! --&gt; Breakpoint &quot;%s&quot;',     [FCore.BreakpointItem(BreakPointIndex).Description]));   \/\/ \u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0435\u0433\u043e (\u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f)   ReleaseBreakpoint := True;   \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438   FCore.ResumeAction := raTraceInto;   \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439   FStepCount := 0; end; <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u044f OnSingleStep, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438 \u0435\u0433\u043e:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnSingleStep(Sender: TObject; ThreadIndex: Integer;   ExceptionRecord: Windows.TExceptionRecord); begin   \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0439\u043c\u0430\u043d\u043d\u044b\u0439 \u0412\u0420 \u0432 \u043b\u043e\u0433   Inc(FStepCount);   Writeln(Format('!!! --&gt; trace step \u2116%d at addr 0x%p',     [FStepCount, ExceptionRecord.ExceptionAddress]));   \/\/ \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443   if FStepCount &gt; 10 then     FCore.ResumeAction := raRun   else     FCore.ResumeAction := raTraceInto; end; <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/-6kq5n_VU4oQ\/UKptwFjty4I\/AAAAAAAAAJc\/ip8VxS85qxw\/s1600\/trace1.png\" alt=\"image\"\/><\/p>\n<p>  \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 StepIn, \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u044f\u0432\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u044f\u0442\u044b\u0439 \u0448\u0430\u0433 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x00409FF4, \u044d\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 _InitExe(), \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x00409C53. \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0436\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 _InitExe(), \u044f \u043d\u0435 \u0441\u0442\u0430\u043b, \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u043c \u0448\u0430\u0433\u043e\u0432.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u041c\u0412\u0420.<br \/>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 OnPageGuard \u0438 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 SetMemoryBreakpoint \u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c \u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u041c\u0412\u0420 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a OnBreakPoint \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u041c\u0412\u0420 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0430\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443, \u0438\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 RemoveBreakpoint (\u0443\u043f\u043b\u044b\u0432\u0443\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b), \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0412\u0420\/\u041c\u0412\u0420\/\u041d\u0412\u0420 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0434\u0432\u0430 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ReleaseBreakpoint \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0412\u0420, \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 RemoveCurrentBreakpoint \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 TFWDebugerCore \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430, \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043d\u0435 \u043e \u043d\u0435\u0439 \u044f \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0438\u0434\u0443\u0449\u0435\u043c \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>  <b>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:<\/b><\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OutputDebugString. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u0432 \u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">\/\/ \/\/  \u0412\u044b\u0432\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/ ============================================================================= procedure TForm1.btnDebugStringClick(Sender: TObject); begin   OutputDebugString('Test debug string'); end; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 OnDebugString, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u0432 \u043d\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnDebugString(Sender: TObject; ThreadIndex: Integer;   Data: TOutputDebugStringInfo); begin   if Data.fUnicode = 1 then     Writeln('DebugString: ' +        PWideChar(FCore.ReadStringW(Data.lpDebugStringData, Data.nDebugStringLength)))   else     Writeln('DebugString: ' +        PAnsiChar(FCore.ReadStringA(Data.lpDebugStringData, Data.nDebugStringLength))); end; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0432 \u043d\u0435\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0449\u0435\u043b\u043a\u0430\u0439\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00abTest debug string\u00bb \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043b\u043e\u0433? \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \ud83d\ude42<\/p>\n<p>  <b>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:<\/b><\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0412\u0420 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438? \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u0432 \u043d\u0435\u0439 \u043f\u0440\u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">\/\/ \/\/  \u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \/\/ ============================================================================= procedure TForm1.btnExceptClick(Sender: TObject); begin   try     asm       int 3     end;     ShowMessage('Debugger detected.');   except     ShowMessage('Debugger not found.');   end; end; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043a\u0430, \u043d\u043e \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0432\u0435\u0440\u0441\u0435\u0440\u044b \u043f\u0430\u043b\u044f\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435.<\/p>\n<p>  \u0421\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u0432 \u043d\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ContinueStatus, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f ContinueDebugEvent, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 DBG_CONTINUE. \u0427\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442? \u042d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0447\u0442\u043e \u043d\u0430\u0448 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u043d\u0438\u043c \u0432\u043e\u0437\u0438\u0442\u0441\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442.<\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430: \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00abINT3\u00bb \u043c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u043c\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a exception..end, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c, \u0442\u043e \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0439\u043c\u0430\u0435\u0442 \u043e\u043d \u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u043e\u043d\u043e \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u2014 \u043c\u044b \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c.<\/p>\n<p>  \u041f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 OnUnknownBreakPoint (int3 \u2014 \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0435 \u043d\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043b\u043e\u0432\u0438\u0442\u044c \u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438). \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnUnknownBreakPoint(Sender: TObject;   ThreadIndex: Integer; ExceptionRecord: Windows.TExceptionRecord); var   ApplicationBP: Boolean; begin   ApplicationBP :=     (DWORD(ExceptionRecord.ExceptionAddress) &gt; FCore.DebugProcessData.EntryPoint) and     (DWORD(ExceptionRecord.ExceptionAddress) &lt; $500000);     Writeln;   if ApplicationBP then   begin     Writeln(Format('!!! --&gt; Unknown application breakpoint at addr 0X%p',       [ExceptionRecord.ExceptionAddress]));     Writeln('!!! --&gt; Exception not handled.');     FCore.ContinueStatus := DBG_EXCEPTION_NOT_HANDLED;   end   else   begin     Writeln(Format('!!! --&gt; Unknown breakpoint at addr 0X%p',       [ExceptionRecord.ExceptionAddress]));     Writeln('!!! --&gt; Exception handled.');     FCore.ContinueStatus := DBG_CONTINUE;   end;   Writeln; end; <\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0412\u0420 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u0442\u0435\u043b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0435\u0442 (\u0433\u0440\u0443\u0431\u043e \u0432\u0437\u044f\u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e $500000). \u0415\u0441\u043b\u0438 \u0412\u0420 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0432 \u0442\u0435\u043b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043a\u0430. \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443, \u043c\u044b \u0437\u043d\u0430\u0442\u044c \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0441 \u043d\u0435\u0439 \u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 \u0444\u043b\u0430\u0433 DBG_EXCEPTION_NOT_HANDLED, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043b\u043e\u0433 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0442\u043e-\u0442\u043e \u0435\u0449\u0435 \u0438\u0433\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438 \u043e\u043d\u043e \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e \ud83d\ude42<\/p>\n<p>  <b>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0435\u043a\u0430:<\/b><\/p>\n<p>  \u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u044d\u0442\u043e \u0442\u043e, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430. \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u044c\u043c\u0443 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u043d\u0443 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"delphi\">\/\/ \/\/  \u0420\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c \u0441\u0442\u0435\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \/\/ ============================================================================= procedure TForm1.btnKillStackClick(Sender: TObject);      procedure T;   var     HugeBuff: array [0..10000] of DWORD;   begin     if HugeBuff[0] &lt;&gt; HugeBuff[10000] then       Inc(HugeBuff[0]);     T;   end;    begin   try     T;   except     T;   end; end; <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443. \u0420\u0435\u0430\u043a\u0446\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u0430\u044f, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u2014 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e. \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442, \u0433\u0440\u0430\u043d\u0438\u0446\u0430, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043e\u0439 \u0444\u043b\u0430\u0433\u043e\u043c PAGE_GUARD. \u041d\u0443 \u0434\u0430, \u044d\u0442\u043e \u0442\u043e\u0442-\u0436\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u043d\u0430\u0448\u0438 \u041c\u0412\u0420, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0446\u0435\u043b\u0435\u0439. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u043f\u0440\u0438\u0434\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 EXCEPTION_STACK_OVERFLOW. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0443\u0436\u0435 \u043f\u0440\u044f\u043c\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u00ab\u0441\u0443\u0448\u0438\u0442\u044c \u0432\u0435\u0441\u043b\u0430\u00bb \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u043d\u043e \u043c\u044b \u0436\u0435 \u043d\u0430\u0441\u0442\u044b\u0440\u043d\u044b\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043d\u044e\u0430\u043d\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u043b\u0430\u0433\u0430 PAGE_GUARD \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u043d \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f, \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0439. \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u0435\u043c \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a EXCEPTION_ACCESS_VIOLATION \u0438 \u0432\u043e\u0442 \u0442\u0443\u0442-\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u00ab\u0432\u0441\u0435\u00bb, \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0430\u0440\u0430\u0445\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c DBG_CONTROL_C \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 (\u043d\u0443 \u0435\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043d\u0430 \u0432\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 AV).<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 OnUnknownException, \u0442.\u043a. TFWDebugerCore \u043d\u0435 \u0432\u044b\u043d\u043e\u0441\u0438\u0442 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u0412 \u043d\u0435\u043c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"delphi\">procedure TdlgDebuger.OnUnknownException(Sender: TObject;   ThreadIndex: Integer; ExceptionRecord: Windows.TExceptionRecord); var   Cause: string; begin   Writeln;     case ExceptionRecord.ExceptionCode of       EXCEPTION_STACK_OVERFLOW:     begin       Writeln('!!! --&gt; Stack overflow detected. Probe to continue.');       FCore.ContinueStatus := DBG_CONTINUE;     end;       EXCEPTION_ACCESS_VIOLATION:     begin       {         The first element of the array contains a read-write flag that         indicates the type of operation that caused the access violation.         If this value is zero, the thread attempted to read the inaccessible data.         If this value is 1, the thread attempted to write to an inaccessible address.         If this value is 8, the thread causes a user-mode data execution prevention (DEP) violation.         The second array element specifies the virtual address of the inaccessible data.       }       case ExceptionRecord.ExceptionInformation[0] of         0: Cause := 'read';         1: Cause := 'write';         8: Cause := 'DEP violation';       else         Cause := 'unknown cause';       end;         Writeln(Format('!!! --&gt; Access violation at addr 0x%p %s of address 0x%p',         [           ExceptionRecord.ExceptionAddress,           Cause,           Pointer(PDWORD(@ExceptionRecord.ExceptionInformation[1])^)         ]));       Writeln('!!! --&gt; Process Stopped.');       FCore.ContinueStatus := DBG_CONTROL_C;     end;     else       Writeln(Format('!!! --&gt; Unknown exception code %p at addr 0x%p',       [         Pointer(ExceptionRecord.ExceptionCode),         ExceptionRecord.ExceptionAddress       ]));     end;     Writeln; end; <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-RrAXLZ-idm0\/UKpt3vQCVxI\/AAAAAAAAAJk\/7t05pB8HYik\/s1600\/done.png\" alt=\"image\"\/><\/p>\n<h4>\u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f:<\/h4>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430. \u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0442\u0435\u043c, \u043d\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<br \/>  \u0421\u043e\u0436\u0430\u043b\u0435\u044e \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u044a\u0435\u043c\u043d\u043e\u0439, \u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0443 \u043c\u0435\u043d\u044f, \u0443\u0432\u044b, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0443\u0445\u0438\u0435 \u0444\u0430\u043a\u0442\u044b, \u0430 \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u044e\u0430\u043d\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043f\u0443\u0449\u0435\u043d\u044b.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \ud83d\ude42<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"http:\/\/rouse.drkb.ru\/blog\/dbg_part2.zip\">http:\/\/rouse.drkb.ru\/blog\/dbg_part2.zip<\/a><\/p>\n<p>  \u041d\u0443 \u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b\u0438 \ud83d\ude42<\/p>\n<p>  \u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435.<\/p>\n<p>   \u2014 \u00a9 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 (Rouse_) \u0411\u0430\u0433\u0435\u043b\u044c<br \/>  \u041c\u043e\u0441\u043a\u0432\u0430, \u043d\u043e\u044f\u0431\u0440\u044c 2012    \t \t\t   \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\/178159\/\"> http:\/\/habrahabr.ru\/post\/178159\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0412<a href=\"http:\/\/habrahabr.ru\/post\/178007\/\"> \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c Delphi \u2014 \u043d\u0435 \u0432\u0441\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0430\u0447\u0435: \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u0430\u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c API \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043d\u0435 \u0440\u0430\u0437\u0436\u0435\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 TFWDebugerCore. \u0427\u0430\u0441\u0442\u044c \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0432\u0430\u0436\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u043e\u043f\u0443\u0449\u0443, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u0438\u0445 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u043d\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u0432 \u043d\u0435\u0439, \u0442\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ee663265(v=vs.85).aspx\">Debugging and Error Handling<\/a><br \/>  \u041f\u043e \u043d\u0435\u0439 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043a\u0430\u043a-\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u043c\u0438\u043d\u0438\u0434\u0430\u043c\u043f\u0430\u043c\u0438. \u0420\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438, \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RVA \u0438 VA \u0438 \u043f\u0440\u043e\u0447\u0435\u0435-\u043f\u0440\u043e\u0447\u0435\u0435.<br \/>  \u041d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u043a\u0443\u0445\u043d\u0435.<\/p>\n<p>  \u042f \u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0435\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u0434\u0430\u0431\u044b \u0443 \u0432\u0430\u0441 \u0431\u044b\u043b\u0430 \u0442\u043e\u0447\u043a\u0430, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e-\u0431\u044b \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0435 \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c (\u0430 \u0438\u043d\u0430\u0447\u0435-\u0442\u043e \u043a\u0430\u043a \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443?).<\/p>\n<p>  \u0412 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c MSDN. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>  \u041e\u0442 \u0432\u0430\u0441 \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0445\u043e\u0442\u044f-\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0442.\u043a. \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0443\u0432\u044b \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<\/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-178159","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/178159","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=178159"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/178159\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=178159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=178159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=178159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}