{"id":289838,"date":"2018-09-24T19:40:02","date_gmt":"2018-09-24T15:40:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=289838"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=289838","title":{"rendered":"\u041c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u044f IDA Pro. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0441\u044f\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vb\/cg\/ao\/vbcgaoqasgaynufhj03nvigjc8u.png\"><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c,<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f <a href=\"http:\/\/habrahabr.ru\/post\/262433\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u044f \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u0440\u0435\u0448\u0438\u043b, \u043f\u0443\u0441\u0442\u044c \u0438 \u043f\u043e \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c, \u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\/\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u043e\u0439 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0437\u0438\u0440\u0430\u0435\u043c\u043e\u0439 <strong>IDA Pro<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0441\u044f\u043a\u0438 \u0432 \u0442\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442, \u0430 \u043a\u043e\u0441\u044f\u043a\u0438 \u043f\u0440\u044f\u043c \u0442\u0430\u043a\u0438 \u0436\u0438\u0442\u044c \u043d\u0435 \u0434\u0430\u044e\u0442. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u043a \u043a\u043e\u0441\u044f\u043a\u0430\u043c. \u0414\u0430, \u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f, \u043f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0442\u044c \u0431\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c: \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0435 \u0432\u0441\u0435 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 (\u043d\u0443, \u0441\u0430\u043c\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043f\u043e\u0447\u0435\u043c\u0443).<a name=\"habracut\"><\/a><\/p>\n<p>  <\/p>\n<h2 id=\"lokalizuem-bagi\">\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0431\u0430\u0433\u0438<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0437\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <em>Motorola M68000<\/em> (\u043c\u043e\u0451\u043c \u0441\u0430\u043c\u043e\u043c \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u0438 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c).<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, <u>\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u0441\u044f\u043a<\/u>: \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <em>PC<\/em>. \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ei\/5j\/rv\/ei5jrvslehyigbplu8dpxxycxua.png\"><br \/>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0451 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0443. \u041d\u043e, \u043e\u043f\u043a\u043e\u0434 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0438\u0437\u0430\u0437\u043c \u0432 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vm\/dd\/wn\/vmddwnrstyww2lzjmuy3zmfppaa.png\"><br \/>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <em>PC<\/em>-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0442.\u043a. \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d <code>signed short<\/code>.<\/p>\n<p>  <\/p>\n<p><u>\u041a\u043e\u0441\u044f\u043a \u0434\u0432\u0430<\/u>: &#171;\u0437\u0435\u0440\u043a\u0430\u043b\u0430&#187; \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432. \u0422.\u043a. \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 <em>m68k<\/em> 24-\u0431\u0438\u0442\u043d\u0430\u044f, \u0442\u043e \u0432\u0441\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0442\u0430\u0440\u0448\u0438\u043c (\u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043c\u043b\u0430\u0434\u0448\u0438\u043c) \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d, \u043a\u0430\u043a \u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<p>  <\/p>\n<p><u>\u041a\u043e\u0441\u044f\u043a \u0442\u0440\u0438<\/u> (\u0441\u043a\u043e\u0440\u0435\u0435, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043a\u043e\u0441\u044f\u043a, \u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430): \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <strong>lineA<\/strong> (<em>1010<\/em>) \u0438 <strong>lineF<\/strong> (<em>1111<\/em>) \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b. \u042d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u043a\u043e\u0434\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043b\u0438\u0448\u044c \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u042f \u0432\u0438\u0434\u0435\u043b \u043b\u0438\u0448\u044c \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u0411\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c.<\/p>\n<p>  <\/p>\n<p><u>\u041a\u043e\u0441\u044f\u043a \u0447\u0435\u0442\u044b\u0440\u0435<\/u>: <strong>trap #N<\/strong> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 <em>cref<\/em>-\u043e\u0432 \u043d\u0430 \u0441\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 &#171;\u043b\u043e\u0432\u0443\u0448\u0435\u043a&#187;.<\/p>\n<p>  <\/p>\n<p><u>\u041a\u043e\u0441\u044f\u043a \u043f\u044f\u0442\u044c<\/u>: <strong>movea.w<\/strong> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 <em>word<\/em>-\u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 <em>xref<\/em> \u043d\u0430 \u0430\u0434\u0440\u0435\u0441, \u043d\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e <em>word<\/em>-\u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"ispravlyaem-bagi-shablon\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0430\u0433\u0438 (\u0448\u0430\u0431\u043b\u043e\u043d)<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 &#171;\u0444\u0438\u043a\u0441&#187;.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, &#171;\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u043a\u0430&#187; \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d. \u0415\u0433\u043e, \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043d\u0430 <em>Python<\/em>, \u043d\u043e, \u044f \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u043b \u0432 &#171;\u043f\u043b\u044e\u0441\u0430\u0445&#187;. \u0421\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0432\u043e\u0437\u044c\u043c\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430 <em>Python<\/em> \u2014 \u0431\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0439 <em>DLL<\/em>-\u043f\u0440\u043e\u0435\u043a\u0442 \u0432 <em>Visual Studio<\/em>: <em>File-&gt;New-&gt;Project-&gt;Windows Desktop Wizard-&gt;Dynamic link library<\/em> (.dll), \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u0430\u043a\u0436\u0435 \u0433\u0430\u043b\u043a\u0443 <em>Empty Project<\/em>, \u0438 \u0441\u043d\u044f\u0432 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ni\/eg\/ak\/niegakemj47gtfsgva9kldhywou.png\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c <em>IDA SDK<\/em>, \u0438 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0435\u0433\u043e \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u0445 <em>Visual Studio<\/em> (\u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>2017<\/em>), \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e. \u0417\u0430\u043e\u0434\u043d\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043f\u0443\u0442\u0438 \u043a <em>IDA Pro<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 <em>View<\/em>-&gt;<em>Other Windows<\/em>-&gt;<em>Property Manager<\/em>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/59\/de\/41\/59de412a0dc50466086740.png\"><\/p>\n<p>  <\/p>\n<p>\u0422.\u043a. \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 <em>SDK 7.0<\/em>, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c <em>x64<\/em>-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <em>Debug | x64<\/em>-&gt;<em>Microsoft.Cpp.x64.user<\/em>-&gt;<em>Properties<\/em>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/59\/de\/42\/59de423c59c08942765331.png\"><\/p>\n<p>  <\/p>\n<p>\u0416\u043c\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0443 <em>Add Macro<\/em> \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <em>User Macros<\/em>, \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u043c \u043c\u0430\u043a\u0440\u043e\u0441 <strong>IDA_SDK<\/strong> \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0442\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 <em>SDK<\/em>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/59\/de\/43\/59de43354eef5656763373.png\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0441 <strong>IDA_DIR<\/strong> (\u043f\u0443\u0442\u044c \u043a \u0412\u0430\u0448\u0435\u0439 <em>IDA Pro<\/em>):<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/59\/de\/43\/59de4393df765196799873.png\"><br \/>  \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e <em>IDA<\/em> \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 <em>%Program Files%<\/em>, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u0430\u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u043c <em>Win32<\/em> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e (\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u043f\u043e <em>x86<\/em> \u0441\u0438\u0441\u0442\u0435\u043c\u044b), \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e <em>x64<\/em>-\u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b <strong>ida_plugin.cpp<\/strong>. \u041a\u043e\u0434 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f <em>C++<\/em>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/py\/y5\/hr\/pyy5hrmaodnyg88lqx_nzdtnlfi.png\"><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fk\/xc\/hp\/fkxchpgi2jaige5obcmrnupxtny.png\"><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_l\/tk\/wf\/_ltkwfmoex1we-lss1o4z8b4bzy.png\"><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0438\u043d\u043a\u043b\u0443\u0434\u044b:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4j\/wg\/v1\/4jwgv1u0h3-_tyy_jhzix5cevkk.png\"><\/p>\n<p>  <\/p>\n<p>\u0418 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 <em>SDK<\/em>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hl\/yl\/pl\/hlylplttumswxacaiw7s8cgxnmg.png\"><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/yv\/vw\/az\/yvvwaz3lccmj-srbihmk7e3psq8.png\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 ida_plugin.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;ida.hpp&gt; #include &lt;idp.hpp&gt; #include &lt;ua.hpp&gt; #include &lt;bytes.hpp&gt; #include &lt;loader.hpp&gt; #include &lt;offset.hpp&gt;  #define NAME \"M68000 proc-fixer plugin\" #define VERSION \"1.0\"  static bool plugin_inited; static bool my_dbg;  \/\/-------------------------------------------------------------------------- static void print_version() {     static const char format[] = NAME \" v%s\\n\";     info(format, VERSION);     msg(format, VERSION); }  \/\/-------------------------------------------------------------------------- static bool init_plugin(void) {     if (ph.id != PLFM_68K)         return false;      return true; }  #ifdef _DEBUG static const char* const optype_names[] = {     \"o_void\",     \"o_reg\",     \"o_mem\",     \"o_phrase\",     \"o_displ\",     \"o_imm\",     \"o_far\",     \"o_near\",     \"o_idpspec0\",     \"o_idpspec1\",     \"o_idpspec2\",     \"o_idpspec3\",     \"o_idpspec4\",     \"o_idpspec5\", };  static const char* const dtyp_names[] = {     \"dt_byte\",     \"dt_word\",     \"dt_dword\",     \"dt_float\",     \"dt_double\",     \"dt_tbyte\",     \"dt_packreal\",     \"dt_qword\",     \"dt_byte16\",     \"dt_code\",     \"dt_void\",     \"dt_fword\",     \"dt_bitfild\",     \"dt_string\",     \"dt_unicode\",     \"dt_3byte\",     \"dt_ldbl\",     \"dt_byte32\",     \"dt_byte64\", };  static void print_insn(const insn_t *insn) {     if (my_dbg)     {         msg(\"cs=%x, \", insn-&gt;cs);         msg(\"ip=%x, \", insn-&gt;ip);         msg(\"ea=%x, \", insn-&gt;ea);         msg(\"itype=%x, \", insn-&gt;itype);         msg(\"size=%x, \", insn-&gt;size);         msg(\"auxpref=%x, \", insn-&gt;auxpref);         msg(\"segpref=%x, \", insn-&gt;segpref);         msg(\"insnpref=%x, \", insn-&gt;insnpref);         msg(\"insnpref=%x, \", insn-&gt;insnpref);          msg(\"flags[\");         if (insn-&gt;flags &amp; INSN_MACRO)             msg(\"INSN_MACRO|\");         if (insn-&gt;flags &amp; INSN_MODMAC)             msg(\"OF_OUTER_DISP\");         msg(\"]\\n\");     } }  static void print_op(ea_t ea, const op_t *op) {     if (my_dbg)     {         msg(\"type[%s], \", optype_names[op-&gt;type]);          msg(\"flags[\");         if (op-&gt;flags &amp; OF_NO_BASE_DISP)             msg(\"OF_NO_BASE_DISP|\");         if (op-&gt;flags &amp; OF_OUTER_DISP)             msg(\"OF_OUTER_DISP|\");         if (op-&gt;flags &amp; PACK_FORM_DEF)             msg(\"PACK_FORM_DEF|\");         if (op-&gt;flags &amp; OF_NUMBER)             msg(\"OF_NUMBER|\");         if (op-&gt;flags &amp; OF_SHOW)             msg(\"OF_SHOW\");         msg(\"], \");          msg(\"dtyp[%s], \", dtyp_names[op-&gt;dtype]);          if (op-&gt;type == o_reg)             msg(\"reg=%x, \", op-&gt;reg);         else if (op-&gt;type == o_displ || op-&gt;type == o_phrase)             msg(\"phrase=%x, \", op-&gt;phrase);         else             msg(\"reg_phrase=%x, \", op-&gt;phrase);          msg(\"addr=%x, \", op-&gt;addr);          msg(\"value=%x, \", op-&gt;value);          msg(\"specval=%x, \", op-&gt;specval);          msg(\"specflag1=%x, \", op-&gt;specflag1);         msg(\"specflag2=%x, \", op-&gt;specflag2);         msg(\"specflag3=%x, \", op-&gt;specflag3);         msg(\"specflag4=%x, \", op-&gt;specflag4);          msg(\"refinfo[\");          opinfo_t buf;          if (get_opinfo(&amp;buf, ea, op-&gt;n, op-&gt;flags))         {             msg(\"target=%x, \", buf.ri.target);             msg(\"base=%x, \", buf.ri.base);             msg(\"tdelta=%x, \", buf.ri.tdelta);              msg(\"flags[\");             if (buf.ri.flags &amp; REFINFO_TYPE)                 msg(\"REFINFO_TYPE|\");             if (buf.ri.flags &amp; REFINFO_RVAOFF)                 msg(\"REFINFO_RVAOFF|\");             if (buf.ri.flags &amp; REFINFO_PASTEND)                 msg(\"REFINFO_PASTEND|\");             if (buf.ri.flags &amp; REFINFO_CUSTOM)                 msg(\"REFINFO_CUSTOM|\");             if (buf.ri.flags &amp; REFINFO_NOBASE)                 msg(\"REFINFO_NOBASE|\");             if (buf.ri.flags &amp; REFINFO_SUBTRACT)                 msg(\"REFINFO_SUBTRACT|\");             if (buf.ri.flags &amp; REFINFO_SIGNEDOP)                 msg(\"REFINFO_SIGNEDOP\");             msg(\"]\");         }         msg(\"]\\n\");     } } #endif  static bool ana_addr = 0;  static ssize_t idaapi hook_idp(void *user_data, int notification_code, va_list va) {     switch (notification_code)     {     case processor_t::ev_ana_insn:     {         insn_t *out = va_arg(va, insn_t*);          if (ana_addr)             break;          ana_addr = 1;          if (ph.ana_insn(out) &lt;= 0)         {             ana_addr = 0;             break;         }          ana_addr = 0;  #ifdef _DEBUG         print_insn(out); #endif          for (int i = 0; i &lt; UA_MAXOP; ++i)         {             op_t &amp;op = out-&gt;ops[i];  #ifdef _DEBUG             print_op(out-&gt;ea, &amp;op); #endif         }          return out-&gt;size;     } break;     case processor_t::ev_emu_insn:     {         const insn_t *insn = va_arg(va, const insn_t*);     } break;     case processor_t::ev_out_mnem:     {         outctx_t *outbuffer = va_arg(va, outctx_t *);         \/\/outbuffer-&gt;out_custom_mnem(mnem);         \/\/return 1;     } break;     default:     { #ifdef _DEBUG         if (my_dbg)         {             msg(\"msg = %d\\n\", notification_code);         } #endif     } break;     }     return 0; }  \/\/-------------------------------------------------------------------------- static int idaapi init(void) {     if (init_plugin())     {         plugin_inited = true;         my_dbg = false;          hook_to_notification_point(HT_IDP, hook_idp, NULL);          print_version();         return PLUGIN_KEEP;     }     return PLUGIN_SKIP; }  \/\/-------------------------------------------------------------------------- static void idaapi term(void) {     if (plugin_inited)     {         unhook_from_notification_point(HT_IDP, hook_idp);          plugin_inited = false;     } }  \/\/-------------------------------------------------------------------------- static bool idaapi run(size_t \/*arg*\/) {     return false; }  \/\/-------------------------------------------------------------------------- const char comment[] = NAME; const char help[] = NAME;  \/\/-------------------------------------------------------------------------- \/\/ \/\/      PLUGIN DESCRIPTION BLOCK \/\/ \/\/-------------------------------------------------------------------------- plugin_t PLUGIN = {     IDP_INTERFACE_VERSION,     PLUGIN_PROC | PLUGIN_MOD, \/\/ plugin flags     init, \/\/ initialize      term, \/\/ terminate. this pointer may be NULL.      run, \/\/ invoke plugin      comment, \/\/ long comment about the plugin              \/\/ it could appear in the status line              \/\/ or as a hint      help, \/\/ multiline help about the plugin      NAME, \/\/ the preferred short name of the plugin      \"\" \/\/ the preferred hotkey to run the plugin };<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"ispravlyaem-bagi-razbiraemsya-v-shablone\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0430\u0433\u0438 (\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435)<\/h2>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 <code>print_op()<\/code> \u0438 <code>print_insn()<\/code> \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u043b\u0430\u0433\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u043f\u043a\u043e\u0434\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043b\u043e\u043c \u043d\u0430\u0448\u0435\u0439 &#171;\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u043a\u0438&#187; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>hook_idp()<\/code>. \u0412 \u043d\u0435\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043d\u0443\u0436\u0434 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u043a\u043e\u043b\u0431\u044d\u043a\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li><code>processor_t::ev_ana_insn<\/code>: \u043d\u0443\u0436\u0435\u043d, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432<\/li>\n<li><code>processor_t::ev_emu_insn<\/code>: \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441-\u0440\u0435\u0444\u044b \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435\/\u043a\u043e\u0434, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b (\u043b\u0438\u0431\u043e \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435)<\/li>\n<li><code>processor_t::ev_out_mnem<\/code>: \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u043a-\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u0432\u0441\u0451 \u0437\u0434\u0435\u0441\u044c<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>init_plugin()<\/code> \u043d\u0435 \u0434\u0430\u0451\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0435\u0439 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u043a\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445.<br \/>  \u041d\u0443 \u0438, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0432\u0435\u0448\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u043a\u043e\u043b\u0431\u044d\u043a \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">hook_to_notification_point(HT_IDP, hook_idp, NULL);<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0422\u0440\u044e\u043a \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>ana_addr<\/code> \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b <code>ana_insn<\/code> \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u043b \u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0435 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0414\u0430, \u0443\u0432\u044b, \u044d\u0442\u043e\u0442 &#171;\u043a\u043e\u0441\u0442\u044b\u043b\u044c&#187; \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e, \u0435\u0449\u0451 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439.<\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"ispravlenie-dlya-problemy-1\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21161<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0435\u0431\u0430\u0436\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u042f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <em>IDA<\/em> \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <em>PC<\/em> (\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u044b\u0436\u043e\u043a \u043f\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043f\u043b\u044e\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u0438\u043d\u0434\u0435\u043a\u0441), \u043d\u043e \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>lea<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435, \u044f \u043d\u0430\u0448\u0451\u043b \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0441 \u043f\u0440\u044b\u0436\u043a\u043e\u043c, \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u043a\u0430\u043a\u0438\u0435 \u0444\u043b\u0430\u0433\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b <em>PC<\/em> \u0441\u043e \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gn\/x3\/uu\/gnx3uu3rcfu50sk0avayghnpvgm.png\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21161<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">case processor_t::ev_ana_insn: {     insn_t *out = va_arg(va, insn_t*);      if (ana_addr)         break;      ana_addr = 1;      if (ph.ana_insn(out) &lt;= 0)     {         ana_addr = 0;         break;     }      ana_addr = 0;      for (int i = 0; i &lt; UA_MAXOP; ++i)     {         op_t &amp;op = out-&gt;ops[i];          switch (op.type)         {         case o_near:         case o_mem:         {             if (out-&gt;itype != 0x76 || op.n != 0 ||                 (op.phrase != 0x09 &amp;&amp; op.phrase != 0x0A) ||                 (op.addr == 0 || op.addr &gt;= (1 &lt;&lt; 23)) ||                 op.specflag1 != 2) \/\/ lea table(pc),Ax                 break;              short diff = op.addr - out-&gt;ea;             if (diff &gt;= SHRT_MIN &amp;&amp; diff &lt;= SHRT_MAX)             {                 out-&gt;Op1.type = o_displ;                 out-&gt;Op1.offb = 2;                 out-&gt;Op1.dtype = dt_dword;                 out-&gt;Op1.phrase = 0x5B;                 out-&gt;Op1.specflag1 = 0x10;             }         } break;         }     }      return out-&gt;size; } break;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"ispravlenie-dlya-problemy-2\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21162<\/h3>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d: <em>0xFF0000-0xFFFFFF<\/em> (\u0434\u043b\u044f RAM) \u0438 <em>0xC00000-0xC000FF<\/em> (\u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 <em>VDP<\/em>). \u0422\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0442\u0438\u043f\u0443 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 <code>o_near<\/code> \u0438 <code>o_mem<\/code>.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21162<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">case processor_t::ev_ana_insn: {     insn_t *out = va_arg(va, insn_t*);      if (ana_addr)         break;      ana_addr = 1;      if (ph.ana_insn(out) &lt;= 0)     {         ana_addr = 0;         break;     }      ana_addr = 0;      for (int i = 0; i &lt; UA_MAXOP; ++i)     {         op_t &amp;op = out-&gt;ops[i];          switch (op.type)         {         case o_near:         case o_mem:         {             op.addr &amp;= 0xFFFFFF; \/\/ for any mirrors              if ((op.addr &amp; 0xE00000) == 0xE00000) \/\/ RAM mirrors                 op.addr |= 0x1F0000;              if ((op.addr &gt;= 0xC00000 &amp;&amp; op.addr &lt;= 0xC0001F) ||                 (op.addr &gt;= 0xC00020 &amp;&amp; op.addr &lt;= 0xC0003F)) \/\/ VDP mirrors                 op.addr &amp;= 0xC000FF;         } break;         }     }      return out-&gt;size; } break;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"ispravlenie-dlya-problemy-3\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21163<\/h3>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432. \u0412\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 <code>CUSTOM_INSN_ITYPE<\/code><\/li>\n<li>lineA\/lineF \u043e\u043f\u043a\u043e\u0434\u044b \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u044b: <strong>0xA0<\/strong>\/<strong>0xF0<\/strong>. \u0417\u043d\u0430\u0447\u0438\u0442, \u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0412 \u043f\u0435\u0440\u0432\u044b\u0445 64-\u0445 \u0434\u0432\u043e\u0440\u0434\u0430\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u041d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445 <strong>0x0A<\/strong> \u0438 <strong>0x0B<\/strong> \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 lineA\/lineF:<br \/> \n<pre><code class=\"cpp\">value = get_dword(0x0A * sizeof(uint32)); \/\/ ... value = get_dword(0x0B * sizeof(uint32));<\/code><\/pre>\n<\/li>\n<li>\u0412 <code>ev_emu_insn<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c cref-\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b code-flow \u043d\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043b\u0441\u044f:<br \/> \n<pre><code class=\"cpp\">    insn-&gt;add_cref(insn-&gt;Op1.addr, 0, fl_CN); \/\/ code ref     insn-&gt;add_cref(insn-&gt;ea + insn-&gt;size, insn-&gt;Op1.offb, fl_F); \/\/ flow ref<\/code><\/pre>\n<\/li>\n<li>\u0412 <code>ev_out_mnem<\/code> \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434:<br \/> \n<pre><code class=\"cpp\">const char *mnem = (outbuffer-&gt;insn.itype == M68K_linef) ? \"line_f\" : \"line_a\"; outbuffer-&gt;out_custom_mnem(mnem);<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/yf\/uy\/dz\/yfuydznfymnf5sxkpz_bco9_szo.png\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21163<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">enum m68k_insn_type_t {     M68K_linea = CUSTOM_INSN_ITYPE,     M68K_linef, }; \/* after includes *\/  case processor_t::ev_ana_insn: {     insn_t *out = va_arg(va, insn_t*);      if (ana_addr)         break;      uint16 itype = 0;     ea_t value = out-&gt;ea;     uchar b = get_byte(out-&gt;ea);      if (b == 0xA0 || b == 0xF0)     {         switch (b)         {         case 0xA0:             itype = M68K_linea;             value = get_dword(0x0A * sizeof(uint32));             break;         case 0xF0:             itype = M68K_linef;             value = get_dword(0x0B * sizeof(uint32));             break;         }          out-&gt;itype = itype;         out-&gt;size = 2;          out-&gt;Op1.type = o_near;         out-&gt;Op1.offb = 1;         out-&gt;Op1.dtype = dt_dword;         out-&gt;Op1.addr = value;         out-&gt;Op1.phrase = 0x0A;         out-&gt;Op1.specflag1 = 2;          out-&gt;Op2.type = o_imm;         out-&gt;Op2.offb = 1;         out-&gt;Op2.dtype = dt_byte;         out-&gt;Op2.value = get_byte(out-&gt;ea + 1);     }      return out-&gt;size; } break; case processor_t::ev_emu_insn: {     const insn_t *insn = va_arg(va, const insn_t*);      if (insn-&gt;itype == M68K_linea || insn-&gt;itype == M68K_linef)     {         insn-&gt;add_cref(insn-&gt;Op1.addr, 0, fl_CN);         insn-&gt;add_cref(insn-&gt;ea + insn-&gt;size, insn-&gt;Op1.offb, fl_F);         return 1;     } } break; case processor_t::ev_out_mnem: {     outctx_t *outbuffer = va_arg(va, outctx_t *);      if (outbuffer-&gt;insn.itype != M68K_linea &amp;&amp; outbuffer-&gt;insn.itype != M68K_linef)         break;      const char *mnem = (outbuffer-&gt;insn.itype == M68K_linef) ? \"line_f\" : \"line_a\";      outbuffer-&gt;out_custom_mnem(mnem);     return 1; } break;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"ispravlenie-dlya-problemy-4\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21164<\/h3>\n<p>  <\/p>\n<p>\u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u043f\u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>trap<\/code>, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u0431\u0435\u0440\u0451\u043c \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432\u0435\u043a\u0442\u043e\u0440-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u0442\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nx\/kx\/lp\/nxkxlp9clt0duvzifv_sfuikk0y.png\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21164<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">case processor_t::ev_emu_insn: {     const insn_t *insn = va_arg(va, const insn_t*);      if (insn-&gt;itype == 0xB6) \/\/ trap #X     {         qstring name;         ea_t trap_addr = get_dword((0x20 + (insn-&gt;Op1.value &amp; 0xF)) * sizeof(uint32));         get_func_name(&amp;name, trap_addr);         set_cmt(insn-&gt;ea, name.c_str(), false);         insn-&gt;add_cref(trap_addr, insn-&gt;Op1.offb, fl_CN);         return 1;     } } break;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"ispravlenie-dlya-problemy-5\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21165<\/h3>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>movea.w<\/code>. \u0417\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0442\u0438\u043f\u0430 word, \u0438 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 RAM, \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u043e-\u043a\u0440\u0443\u0442\u043e\u043c\u0443, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u044b 0xFF0000. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/m3\/6f\/m7\/m36fm7jynpygy2m8gs61yi2owyo.png\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u21165<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">case processor_t::ev_ana_insn: {     insn_t *out = va_arg(va, insn_t*);      if (ana_addr)         break;      ana_addr = 1;      if (ph.ana_insn(out) &lt;= 0)     {         ana_addr = 0;         break;     }      ana_addr = 0;      for (int i = 0; i &lt; UA_MAXOP; ++i)     {         op_t &amp;op = out-&gt;ops[i];          switch (op.type)         {         case o_imm:         {             if (out-&gt;itype != 0x7F || op.n != 0) \/\/ movea                 break;              if (op.value &amp; 0xFF0000 &amp;&amp; op.dtype == dt_word) {                 op.value &amp;= 0xFFFF;             }         } break;         }     }      return out-&gt;size; } break; case processor_t::ev_emu_insn: {     const insn_t *insn = va_arg(va, const insn_t*);      for (int i = 0; i &lt; UA_MAXOP; ++i)     {         const op_t &amp;op = insn-&gt;ops[i];          switch (op.type)         {         case o_imm:         {             if (insn-&gt;itype != 0x7F || op.n != 0 || op.dtype != dt_word) \/\/ movea                 break;              op_offset(insn-&gt;ea, op.n, REF_OFF32, BADADDR, 0xFF0000);         } break;         }     } } break;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"vyvody\">\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432, \u0430 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435.<br \/>  \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u043e\u0432\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 \u043d\u0435\u0439 (\u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0440\u0435\u0432\u0435\u0440\u0441 \u043f\u0440\u043e\u0446-\u043c\u043e\u0434\u0443\u043b\u044f). \u041d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a: <a href=\"https:\/\/github.com\/lab313ru\/m68k_fixer\">https:\/\/github.com\/lab313ru\/m68k_fixer<\/a><\/p>\n<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/post\/424263\/\"> https:\/\/habr.com\/post\/424263\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vb\/cg\/ao\/vbcgaoqasgaynufhj03nvigjc8u.png\"><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c,<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f <a href=\"http:\/\/habrahabr.ru\/post\/262433\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u044f \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u0440\u0435\u0448\u0438\u043b, \u043f\u0443\u0441\u0442\u044c \u0438 \u043f\u043e \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c, \u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\/\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u043e\u0439 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0437\u0438\u0440\u0430\u0435\u043c\u043e\u0439 <strong>IDA Pro<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0441\u044f\u043a\u0438 \u0432 \u0442\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442, \u0430 \u043a\u043e\u0441\u044f\u043a\u0438 \u043f\u0440\u044f\u043c \u0442\u0430\u043a\u0438 \u0436\u0438\u0442\u044c \u043d\u0435 \u0434\u0430\u044e\u0442. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u043a \u043a\u043e\u0441\u044f\u043a\u0430\u043c. \u0414\u0430, \u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f, \u043f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0442\u044c \u0431\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c: \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0435 \u0432\u0441\u0435 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 (\u043d\u0443, \u0441\u0430\u043c\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043f\u043e\u0447\u0435\u043c\u0443).<\/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-289838","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/289838","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=289838"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/289838\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=289838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=289838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=289838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}