<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2825705681994682632</id><updated>2011-10-02T22:14:31.469-07:00</updated><category term='ida'/><category term='python'/><category term='idc'/><category term='gmail'/><category term='extension'/><category term='idapython'/><category term='google'/><category term='chrome'/><category term='project euler'/><title type='text'>.::tech stuff</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-8113019312390165567</id><published>2009-11-07T07:32:00.001-08:00</published><updated>2009-11-07T07:34:49.278-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google+</title><content type='html'>&lt;b&gt;Google+&lt;/b&gt;&lt;br /&gt;&lt;div&gt;Занялся совершенно несвойственным для меня делом - пишу extension для Google Chrome. Который пока делает такие вещи:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;добавляет иконки к ссылка на сервисы гугла(ну те что гугл рисует сверху своих страниц). Выглядит это так:&lt;div style="text-align: left" id="gbl_"&gt;&lt;img src="http://docs.google.com/File?id=dhdgp259_201hrvr3pg2_b" style="width: 405px; height: 25px"&gt;&lt;/div&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;показывает результаты поиска в 2 колонки.&lt;div style="text-align: left" id="y5g5"&gt;&lt;img src="http://docs.google.com/File?id=dhdgp259_202h6fs4khm_b" style="width: 820px; height: 430px"&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;добавляет количество непрочитанных писем/фидов к ссылкам на Gmail и Google Reader и к именам закладок на эти сервисы. На скриншоте выше видно как это выглядит для ссылок, для закладок выглядит так&amp;nbsp;&lt;div style="text-align: left" id="b:-y"&gt;&lt;img src="http://docs.google.com/File?id=dhdgp259_2035p2s53dc_b" style="width: 180px; height: 154px"&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;в результатах поиска картинок делает прямые ссылки&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;Создал проект на Google Code -&amp;nbsp;&lt;a href="http://code.google.com/p/googleplus/"&gt;http://code.google.com/p/googleplus/&lt;/a&gt;. Может теперь с svn и mercurial разберусь =).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;В планах добавить поддержку навигации с клавиатуры для результатов поиска, так же надо бы подумать над цветом фона под результатом, возможно добавить каких красивосте вроде закругленных уголков =)), может быть заморочусь в автоматической подгрузкой следующей страницы результатом в прокрутке к концу страницы.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;В общем, если кого заинтересовало, то вот &lt;a id="g35t" href="http://googleplus.googlecode.com/svn/trunk/google_plus.crx" title="ссылка"&gt;ссылка&lt;/a&gt; для установки&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-8113019312390165567?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/8113019312390165567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=8113019312390165567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/8113019312390165567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/8113019312390165567'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2009/11/google.html' title='Google+'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-4247038625760089893</id><published>2009-01-03T05:27:00.001-08:00</published><updated>2009-01-03T05:57:08.932-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project euler'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Project Euler: Problem 28</title><content type='html'>Собственно сама &lt;A id="t2.d" href="http://projecteuler.net/index.php?section=problems&amp;amp;id=28" title="проблема"&gt;проблема&lt;/A&gt;:&lt;br /&gt;&lt;div style="border-top: solid 1px #ddd;border-bottom: solid 1px #aaa;border-left: solid 1px #ddd;border-right: solid 1px #aaa;background-color: #fff;margin-right:2em"&gt; &lt;br /&gt;Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:&lt;br /&gt;&lt;div style="text-align:center;font-family:courier new;"&gt;&lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;21&lt;/SPAN&gt; 22 23 24 &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;25&lt;/SPAN&gt;&lt;br /&gt;20  &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;7&lt;/SPAN&gt;  8  &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;9&lt;/SPAN&gt; 10&lt;br /&gt;19  6  &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;1&lt;/SPAN&gt;  2 11&lt;br /&gt;18  &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;5&lt;/SPAN&gt;  4  &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;3&lt;/SPAN&gt; 12&lt;br /&gt;&lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;17&lt;/SPAN&gt; 16 15 14 &lt;SPAN style="color:#ff0000;font-family:courier new;"&gt;13&lt;/SPAN&gt;&lt;/div&gt;&lt;br /&gt;It can be verified that the sum of both diagonals is 101.&lt;br /&gt;What is the sum of both diagonals in a 1001 by 1001 spiral formed in the same way?&lt;/div&gt;&lt;br /&gt;В Excele была навояна следующая таблица(спираль 15x15)&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;TABLE class="zeroBorder"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="s0" bgcolor="orange" style="text-align: center"&gt;211&lt;br /&gt;&lt;TD class="s1"&gt;212&lt;br /&gt;&lt;TD class="s1"&gt;213&lt;br /&gt;&lt;TD class="s1"&gt;214&lt;br /&gt;&lt;TD class="s1"&gt;215&lt;br /&gt;&lt;TD class="s1"&gt;216&lt;br /&gt;&lt;TD class="s1"&gt;217&lt;br /&gt;&lt;TD class="s1"&gt;218&lt;br /&gt;&lt;TD class="s1"&gt;219&lt;br /&gt;&lt;TD class="s1"&gt;220&lt;br /&gt;&lt;TD class="s1"&gt;221&lt;br /&gt;&lt;TD class="s1"&gt;222&lt;br /&gt;&lt;TD class="s1"&gt;223&lt;br /&gt;&lt;TD class="s1"&gt;224&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;225&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;210&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;157&lt;br /&gt;&lt;TD class="s1"&gt;158&lt;br /&gt;&lt;TD class="s1"&gt;159&lt;br /&gt;&lt;TD class="s1"&gt;160&lt;br /&gt;&lt;TD class="s1"&gt;161&lt;br /&gt;&lt;TD class="s1"&gt;162&lt;br /&gt;&lt;TD class="s1"&gt;163&lt;br /&gt;&lt;TD class="s1"&gt;164&lt;br /&gt;&lt;TD class="s1"&gt;165&lt;br /&gt;&lt;TD class="s1"&gt;166&lt;br /&gt;&lt;TD class="s1"&gt;167&lt;br /&gt;&lt;TD class="s1"&gt;168&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;169&lt;br /&gt;&lt;TD class="s1"&gt;170&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;209&lt;br /&gt;&lt;TD class="s1"&gt;156&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;111&lt;br /&gt;&lt;TD class="s1"&gt;112&lt;br /&gt;&lt;TD class="s1"&gt;113&lt;br /&gt;&lt;TD class="s1"&gt;114&lt;br /&gt;&lt;TD class="s1"&gt;115&lt;br /&gt;&lt;TD class="s1"&gt;116&lt;br /&gt;&lt;TD class="s1"&gt;117&lt;br /&gt;&lt;TD class="s1"&gt;118&lt;br /&gt;&lt;TD class="s1"&gt;119&lt;br /&gt;&lt;TD class="s1"&gt;120&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;121&lt;br /&gt;&lt;TD class="s1"&gt;122&lt;br /&gt;&lt;TD class="s1"&gt;171&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;208&lt;br /&gt;&lt;TD class="s1"&gt;155&lt;br /&gt;&lt;TD class="s1"&gt;110&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;73&lt;br /&gt;&lt;TD class="s1"&gt;74&lt;br /&gt;&lt;TD class="s1"&gt;75&lt;br /&gt;&lt;TD class="s1"&gt;76&lt;br /&gt;&lt;TD class="s1"&gt;77&lt;br /&gt;&lt;TD class="s1"&gt;78&lt;br /&gt;&lt;TD class="s1"&gt;79&lt;br /&gt;&lt;TD class="s1"&gt;80&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;81&lt;br /&gt;&lt;TD class="s1"&gt;82&lt;br /&gt;&lt;TD class="s1"&gt;123&lt;br /&gt;&lt;TD class="s1"&gt;172&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;207&lt;br /&gt;&lt;TD class="s1"&gt;154&lt;br /&gt;&lt;TD class="s1"&gt;109&lt;br /&gt;&lt;TD class="s1"&gt;72&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;43&lt;br /&gt;&lt;TD class="s1"&gt;44&lt;br /&gt;&lt;TD class="s1"&gt;45&lt;br /&gt;&lt;TD class="s1"&gt;46&lt;br /&gt;&lt;TD class="s1"&gt;47&lt;br /&gt;&lt;TD class="s1"&gt;48&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;49&lt;br /&gt;&lt;TD class="s1"&gt;50&lt;br /&gt;&lt;TD class="s1"&gt;83&lt;br /&gt;&lt;TD class="s1"&gt;124&lt;br /&gt;&lt;TD class="s1"&gt;173&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;206&lt;br /&gt;&lt;TD class="s1"&gt;153&lt;br /&gt;&lt;TD class="s1"&gt;108&lt;br /&gt;&lt;TD class="s1"&gt;71&lt;br /&gt;&lt;TD class="s1"&gt;42&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;21&lt;br /&gt;&lt;TD class="s1"&gt;22&lt;br /&gt;&lt;TD class="s1"&gt;23&lt;br /&gt;&lt;TD class="s1"&gt;24&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;25&lt;br /&gt;&lt;TD class="s1"&gt;26&lt;br /&gt;&lt;TD class="s1"&gt;51&lt;br /&gt;&lt;TD class="s1"&gt;84&lt;br /&gt;&lt;TD class="s1"&gt;125&lt;br /&gt;&lt;TD class="s1"&gt;174&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;205&lt;br /&gt;&lt;TD class="s1"&gt;152&lt;br /&gt;&lt;TD class="s1"&gt;107&lt;br /&gt;&lt;TD class="s1"&gt;70&lt;br /&gt;&lt;TD class="s1"&gt;41&lt;br /&gt;&lt;TD class="s1"&gt;20&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;7&lt;br /&gt;&lt;TD class="s1"&gt;8&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;9&lt;br /&gt;&lt;TD class="s1"&gt;10&lt;br /&gt;&lt;TD class="s1"&gt;27&lt;br /&gt;&lt;TD class="s1"&gt;52&lt;br /&gt;&lt;TD class="s1"&gt;85&lt;br /&gt;&lt;TD class="s1"&gt;126&lt;br /&gt;&lt;TD class="s1"&gt;175&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;204&lt;br /&gt;&lt;TD class="s1"&gt;151&lt;br /&gt;&lt;TD class="s1"&gt;106&lt;br /&gt;&lt;TD class="s1"&gt;69&lt;br /&gt;&lt;TD class="s1"&gt;40&lt;br /&gt;&lt;TD class="s1"&gt;19&lt;br /&gt;&lt;TD class="s1"&gt;6&lt;br /&gt;&lt;TD class="s2" bgcolor="orange"&gt;1&lt;br /&gt;&lt;TD class="s1"&gt;2&lt;br /&gt;&lt;TD class="s1"&gt;11&lt;br /&gt;&lt;TD class="s1"&gt;28&lt;br /&gt;&lt;TD class="s1"&gt;53&lt;br /&gt;&lt;TD class="s1"&gt;86&lt;br /&gt;&lt;TD class="s1"&gt;127&lt;br /&gt;&lt;TD class="s1"&gt;176&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;203&lt;br /&gt;&lt;TD class="s1"&gt;150&lt;br /&gt;&lt;TD class="s1"&gt;105&lt;br /&gt;&lt;TD class="s1"&gt;68&lt;br /&gt;&lt;TD class="s1"&gt;39&lt;br /&gt;&lt;TD class="s1"&gt;18&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;5&lt;br /&gt;&lt;TD class="s1"&gt;4&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;3&lt;br /&gt;&lt;TD class="s1"&gt;12&lt;br /&gt;&lt;TD class="s1"&gt;29&lt;br /&gt;&lt;TD class="s1"&gt;54&lt;br /&gt;&lt;TD class="s1"&gt;87&lt;br /&gt;&lt;TD class="s1"&gt;128&lt;br /&gt;&lt;TD class="s1"&gt;177&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;202&lt;br /&gt;&lt;TD class="s1"&gt;149&lt;br /&gt;&lt;TD class="s1"&gt;104&lt;br /&gt;&lt;TD class="s1"&gt;67&lt;br /&gt;&lt;TD class="s1"&gt;38&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;17&lt;br /&gt;&lt;TD class="s1"&gt;16&lt;br /&gt;&lt;TD class="s1"&gt;15&lt;br /&gt;&lt;TD class="s1"&gt;14&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;13&lt;br /&gt;&lt;TD class="s1"&gt;30&lt;br /&gt;&lt;TD class="s1"&gt;55&lt;br /&gt;&lt;TD class="s1"&gt;88&lt;br /&gt;&lt;TD class="s1"&gt;129&lt;br /&gt;&lt;TD class="s1"&gt;178&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;201&lt;br /&gt;&lt;TD class="s1"&gt;148&lt;br /&gt;&lt;TD class="s1"&gt;103&lt;br /&gt;&lt;TD class="s1"&gt;66&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;37&lt;br /&gt;&lt;TD class="s1"&gt;36&lt;br /&gt;&lt;TD class="s1"&gt;35&lt;br /&gt;&lt;TD class="s1"&gt;34&lt;br /&gt;&lt;TD class="s1"&gt;33&lt;br /&gt;&lt;TD class="s1"&gt;32&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;31&lt;br /&gt;&lt;TD class="s1"&gt;56&lt;br /&gt;&lt;TD class="s1"&gt;89&lt;br /&gt;&lt;TD class="s1"&gt;130&lt;br /&gt;&lt;TD class="s1"&gt;179&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;200&lt;br /&gt;&lt;TD class="s1"&gt;147&lt;br /&gt;&lt;TD class="s1"&gt;102&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;65&lt;br /&gt;&lt;TD class="s1"&gt;64&lt;br /&gt;&lt;TD class="s1"&gt;63&lt;br /&gt;&lt;TD class="s1"&gt;62&lt;br /&gt;&lt;TD class="s1"&gt;61&lt;br /&gt;&lt;TD class="s1"&gt;60&lt;br /&gt;&lt;TD class="s1"&gt;59&lt;br /&gt;&lt;TD class="s1"&gt;58&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;57&lt;br /&gt;&lt;TD class="s1"&gt;90&lt;br /&gt;&lt;TD class="s1"&gt;131&lt;br /&gt;&lt;TD class="s1"&gt;180&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;199&lt;br /&gt;&lt;TD class="s1"&gt;146&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;101&lt;br /&gt;&lt;TD class="s1"&gt;100&lt;br /&gt;&lt;TD class="s1"&gt;99&lt;br /&gt;&lt;TD class="s1"&gt;98&lt;br /&gt;&lt;TD class="s1"&gt;97&lt;br /&gt;&lt;TD class="s1"&gt;96&lt;br /&gt;&lt;TD class="s1"&gt;95&lt;br /&gt;&lt;TD class="s1"&gt;94&lt;br /&gt;&lt;TD class="s1"&gt;93&lt;br /&gt;&lt;TD class="s1"&gt;92&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;91&lt;br /&gt;&lt;TD class="s1"&gt;132&lt;br /&gt;&lt;TD class="s1"&gt;181&lt;br /&gt;&lt;TR&gt;&lt;TD class="s1"&gt;198&lt;br /&gt;&lt;TD class="s2" bgcolor="blue"&gt;145&lt;br /&gt;&lt;TD class="s1"&gt;144&lt;br /&gt;&lt;TD class="s1"&gt;143&lt;br /&gt;&lt;TD class="s1"&gt;142&lt;br /&gt;&lt;TD class="s1"&gt;141&lt;br /&gt;&lt;TD class="s1"&gt;140&lt;br /&gt;&lt;TD class="s1"&gt;139&lt;br /&gt;&lt;TD class="s1"&gt;138&lt;br /&gt;&lt;TD class="s1"&gt;137&lt;br /&gt;&lt;TD class="s1"&gt;136&lt;br /&gt;&lt;TD class="s1"&gt;135&lt;br /&gt;&lt;TD class="s1"&gt;134&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;133&lt;br /&gt;&lt;TD class="s1"&gt;182&lt;br /&gt;&lt;TR&gt;&lt;TD class="s2" bgcolor="blue"&gt;197&lt;br /&gt;&lt;TD class="s1"&gt;196&lt;br /&gt;&lt;TD class="s1"&gt;195&lt;br /&gt;&lt;TD class="s1"&gt;194&lt;br /&gt;&lt;TD class="s1"&gt;193&lt;br /&gt;&lt;TD class="s1"&gt;192&lt;br /&gt;&lt;TD class="s1"&gt;191&lt;br /&gt;&lt;TD class="s1"&gt;190&lt;br /&gt;&lt;TD class="s1"&gt;189&lt;br /&gt;&lt;TD class="s1"&gt;188&lt;br /&gt;&lt;TD class="s1"&gt;187&lt;br /&gt;&lt;TD class="s1"&gt;186&lt;br /&gt;&lt;TD class="s1"&gt;185&lt;br /&gt;&lt;TD class="s1"&gt;184&lt;br /&gt;&lt;TD class="s0" bgcolor="orange"&gt;183&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/div&gt;&lt;br /&gt;После вдумчивого втыкания =) в эту таблицу, были выявлены следующие закономерности:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Числа на дополнительно диагонали в верхней половины таблицы равны квадрату размера спирали, крайними элементами которой они являются &lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;Числа на главной диагонали в верхней половине таблицы равны числу на дополнительной диагонали минус (размер спирали минус 1) (под спиралью имеется ввиду спираль, крайним элементом которой является расматриваемы элемент главной диагонали)&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;Числа на дополнительной диагонали в нижней половине таблицы могут быть получены вычитанием 2n из элементов главной диагонали просматриваемых в обратном порядке&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;Числа на главной диагонали в нижней половине таблицы могут быть получены вычитанием 6n из элементов дополнительной диагонали просматриваемых в обратном порядке&lt;/LI&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;Как-то сумбурно получилось =). Надеюсь по коду будет более понятно&lt;/DIV&gt;&lt;br /&gt;&lt;PRE&gt;&lt;FONT color="#d7d700"&gt; 1 &lt;/FONT&gt;main_diagonal = &lt;FONT color="#00d7d7"&gt;list&lt;/FONT&gt;()&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 2 &lt;/FONT&gt;additional_diagonal = &lt;FONT color="#00d7d7"&gt;list&lt;/FONT&gt;()&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 3 &lt;/FONT&gt;n = &lt;FONT color="#ff7f00"&gt;1001&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 4 &lt;/FONT&gt;cur = &lt;FONT color="#ff7f00"&gt;1001&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 5 &lt;/FONT&gt;&lt;FONT color="#0089ff"&gt;while&lt;/FONT&gt; cur != &lt;FONT color="#ff7f00"&gt;1&lt;/FONT&gt;:&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 6 &lt;/FONT&gt;     el = cur * cur&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 7 &lt;/FONT&gt;     additional_diagonal.append(el)&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 8 &lt;/FONT&gt;     main_diagonal.append(el - cur + &lt;FONT color="#ff7f00"&gt;1&lt;/FONT&gt;)&lt;br /&gt;&lt;FONT color="#d7d700"&gt; 9 &lt;/FONT&gt;     cur -= &lt;FONT color="#ff7f00"&gt;2&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt;10 &lt;/FONT&gt;cur = &lt;FONT color="#ff7f00"&gt;2&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt;11 &lt;/FONT&gt;temp_add = &lt;FONT color="#00d7d7"&gt;list&lt;/FONT&gt;()&lt;br /&gt;&lt;FONT color="#d7d700"&gt;12 &lt;/FONT&gt;&lt;FONT color="#0089ff"&gt;for&lt;/FONT&gt; x &lt;FONT color="#0089ff"&gt;in&lt;/FONT&gt; &lt;FONT color="#00d7d7"&gt;reversed&lt;/FONT&gt;(main_diagonal):&lt;br /&gt;&lt;FONT color="#d7d700"&gt;13 &lt;/FONT&gt;     temp_add.append(x - cur)&lt;br /&gt;&lt;FONT color="#d7d700"&gt;14 &lt;/FONT&gt;     cur += &lt;FONT color="#ff7f00"&gt;2&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt;15 &lt;/FONT&gt;cur = &lt;FONT color="#ff7f00"&gt;6&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt;16 &lt;/FONT&gt;temp_main = &lt;FONT color="#00d7d7"&gt;list&lt;/FONT&gt;()&lt;br /&gt;&lt;FONT color="#d7d700"&gt;17 &lt;/FONT&gt;&lt;FONT color="#0089ff"&gt;for&lt;/FONT&gt; x &lt;FONT color="#0089ff"&gt;in&lt;/FONT&gt; &lt;FONT color="#00d7d7"&gt;reversed&lt;/FONT&gt;(additional_diagonal):&lt;br /&gt;&lt;FONT color="#d7d700"&gt;18 &lt;/FONT&gt;     temp_main.append(x - cur)&lt;br /&gt;&lt;FONT color="#d7d700"&gt;19 &lt;/FONT&gt;     cur += &lt;FONT color="#ff7f00"&gt;6&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color="#d7d700"&gt;20 &lt;/FONT&gt;additional_diagonal += temp_add&lt;br /&gt;&lt;FONT color="#d7d700"&gt;21 &lt;/FONT&gt;main_diagonal += temp_main&lt;br /&gt;&lt;FONT color="#d7d700"&gt;22 &lt;/FONT&gt;&lt;FONT color="#0089ff"&gt;print&lt;/FONT&gt; &lt;FONT color="#00d7d7"&gt;sum&lt;/FONT&gt;(additional_diagonal) + &lt;FONT color="#00d7d7"&gt;sum&lt;/FONT&gt;(main_diagonal) + &lt;FONT color="#ff7f00"&gt;1&lt;/FONT&gt;&lt;br /&gt;&lt;/PRE&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-4247038625760089893?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/4247038625760089893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=4247038625760089893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/4247038625760089893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/4247038625760089893'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2009/01/untitled.html' title='Project Euler: Problem 28'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-4666996192353549732</id><published>2008-12-14T11:58:00.001-08:00</published><updated>2009-01-03T05:49:05.819-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idapython'/><category scheme='http://www.blogger.com/atom/ns#' term='ida'/><title type='text'>Запуск IDLE из IDA</title><content type='html'>Пришла мне как-то в голову мысль что неплохо было бы запустить &lt;a id="wg3e" href="http://www.python.org/idle/doc/idlemain.html" title="IDLE"&gt;IDLE&lt;/a&gt; из IDA. То что открывается по Alt+8 удобным никак не назовешь =), туда разве что-нибудь однострочное писать. &lt;div&gt;Итак просмотрев %PYTHONPATH%\Lib\idlelib\ написал следующий код&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;font color="#d7d700"&gt;1 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; idlelib.PyShell&lt;br /&gt;&lt;font color="#d7d700"&gt;2 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;3 &lt;/font&gt;idlelib.PyShell.main()&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;В итоге получил следующее сообщение &lt;/pre&gt;&lt;pre&gt;&lt;div style="text-align: center; padding-top: 1em; padding-bottom: 1em; padding-right: 0px; padding-left: 0px" id="fa:e"&gt;&lt;img src="http://docs.google.com/File?id=dhdgp259_128fk3f2nf9_b" style="width: 714px; height: 123px"&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;IDLE в итоге запустилось, но тут же вылезло&lt;/div&gt;&lt;div style="text-align: center;"&gt; &lt;img src="http://docs.google.com/File?id=dhdgp259_1299nh99vgz_b" style="width: 437px; height: 185px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Покопавшись в хелпе к IDLE, нашел следующее&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New';"&gt;  -n         run IDLE without a subprocess (see Help/IDLE Help for details)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;В итоге был написан такой код&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;font color="#d7d700"&gt;1 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; sys&lt;br /&gt;&lt;font color="#d7d700"&gt;2 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; idlelib.PyShell&lt;br /&gt;&lt;font color="#d7d700"&gt;3 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;4 &lt;/font&gt;sys.argv.append(&lt;font color="#ff7f00"&gt;"-n"&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;5 &lt;/font&gt;idlelib.PyShell.main()&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: Verdana;"&gt;Результатом выполнения которого, стал нормальный запуск IDLE со всеми прелестями(автодополнение, подсветка синтаксиса, история команд)&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;div style="text-align: center; padding-top: 1em; padding-bottom: 1em; padding-right: 0px; padding-left: 0px" id="cekk"&gt;&lt;img src="http://docs.google.com/File?id=dhdgp259_130g2j44zcn_b" style="width: 679px; height: 717px"&gt;&lt;/div&gt;&lt;div style="text-align: left;padding-top: 1em; padding-bottom: 1em; padding-right: 0px; padding-left: 0px" id="cekk"&gt;&lt;span style="font-family: Verdana;"&gt;UPD: Кстати, не рекомендую использовать exit() для закрытия окна IDLE, вместе с ним закроется и IDA =)&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-4666996192353549732?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/4666996192353549732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=4666996192353549732' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/4666996192353549732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/4666996192353549732'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/12/idle-ida.html' title='Запуск IDLE из IDA'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-9125888953472337266</id><published>2008-10-23T07:39:00.000-07:00</published><updated>2008-10-23T07:59:25.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idapython'/><category scheme='http://www.blogger.com/atom/ns#' term='ida'/><title type='text'>COM intreface stuff...</title><content type='html'>Исследуя программы активно использующие COM довольно часто приходится видеть подобные таблицы адресов функций в IDA:&lt;br /&gt;&lt;pre&gt;&lt;span style="color:gray"&gt;.text:30556F74 &lt;/span&gt;&lt;span style="color:navy"&gt;off_30556F74    dd offset sub_3044E86C  &lt;/span&gt;&lt;span style="color:#8080ff"&gt;; DATA XREF: sub_30556F42+Co&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F74                                         &lt;/span&gt;&lt;span style="color:#8080ff"&gt;; sub_3056E00C+Eo&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F78                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_30556FD0&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F7C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3043B47E&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F80                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_30556FF7&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F84                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_30557040&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F88                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3041FEB4&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F8C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3041FEE5&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F90                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_303AF6EA&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F94                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_303B7E17&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F98                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3044E97D&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F9C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_30377AC8&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FA0                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3041FF18&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FA4                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_302BDAEC&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FA8                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_303B7C37&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FAC                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_3055707A&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FB0                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_302BDC75&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FB4                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_305570BF&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556FB8                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset sub_30377C7F&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Ясно что это таблица виртуальных методов некоторого класса. Иногда бывает известно какой именно интерфейс реализует этот класс(в случае с COM это можно узнать из первого виртуального метода(QueryInterface)).&lt;br /&gt;Кроме того для удобства исследования кода в котором есть вызовы виртуальных методов такого класса, неплохо завести структуру, которая опысывает реализованный интерфейс. Часто это даже не приходится делать руками - многие стандартные COM интерфейсы уже есть среди встроеных структур IDA.&lt;br /&gt;Итак у нас есть имена функций и таблица указателей на эти функции, неплохо было бы дать им вразумительные имена. Можно все сделать руками - обычно функций не так уж много =)) Однако лень взяла свое и тут набросал небольшой скрипт для автоматизации сего процесса&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 1 &lt;/font&gt;&lt;font color="#0089ff"&gt;from&lt;/font&gt; idc &lt;font color="#0089ff"&gt;import&lt;/font&gt; *&lt;br /&gt;&lt;font color="#d7d700"&gt; 2 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 3 &lt;/font&gt;&lt;font color="#0089ff"&gt;def&lt;/font&gt; &lt;font color="#00d7d7"&gt;GetProcNamesFromStruct&lt;/font&gt;(name):&lt;br /&gt;&lt;font color="#d7d700"&gt; 4 &lt;/font&gt;     sid = GetStrucIdByName(name)&lt;br /&gt;&lt;font color="#d7d700"&gt; 5 &lt;/font&gt;     ssize = GetStrucSize(sid)&lt;br /&gt;&lt;font color="#d7d700"&gt; 6 &lt;/font&gt;     i = &lt;font color="#ff7f00"&gt;0&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 7 &lt;/font&gt;     name = name.replace(&lt;font color="#ff7f00"&gt;&amp;quot;Vtbl&amp;quot;&lt;/font&gt;, &lt;font color="#ff7f00"&gt;&amp;quot;&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt; 8 &lt;/font&gt;     ea = ScreenEA()&lt;br /&gt;&lt;font color="#d7d700"&gt; 9 &lt;/font&gt;     &lt;font color="#0089ff"&gt;while&lt;/font&gt; i &amp;lt; ssize:&lt;br /&gt;&lt;font color="#d7d700"&gt;10 &lt;/font&gt;          mname = GetMemberNames(sid, i)&lt;br /&gt;&lt;font color="#d7d700"&gt;11 &lt;/font&gt;          size = GetMemberSize(sid, i)&lt;br /&gt;&lt;font color="#d7d700"&gt;12 &lt;/font&gt;          mname = &lt;font color="#ff7f00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#a3d700"&gt;%s&lt;/font&gt;&lt;font color="#ff7f00"&gt;_&lt;/font&gt;&lt;font color="#a3d700"&gt;%s&lt;/font&gt;&lt;font color="#ff7f00"&gt;&amp;quot;&lt;/font&gt; %(name, mname)&lt;br /&gt;&lt;font color="#d7d700"&gt;13 &lt;/font&gt;          MakeNameEx(Dword(ea), mname, SN_NOCHECK)&lt;br /&gt;&lt;font color="#d7d700"&gt;14 &lt;/font&gt;          ea += &lt;font color="#ff7f00"&gt;4&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;15 &lt;/font&gt;          i += size&lt;br /&gt;&lt;font color="#d7d700"&gt;16 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;17 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;18 &lt;/font&gt;&lt;font color="#0089ff"&gt;class&lt;/font&gt; &lt;font color="#00d7d7"&gt;StructChooser&lt;/font&gt;(Choose):&lt;br /&gt;&lt;font color="#d7d700"&gt;19 &lt;/font&gt;          &lt;font color="#0089ff"&gt;def&lt;/font&gt; &lt;font color="#00d7d7"&gt;__init__&lt;/font&gt;(self, &lt;font color="#00d7d7"&gt;list&lt;/font&gt;=[], name=&lt;font color="#ff7f00"&gt;&amp;quot;Structures&amp;quot;&lt;/font&gt;):&lt;br /&gt;&lt;font color="#d7d700"&gt;20 &lt;/font&gt;                    Choose.__init__(self, &lt;font color="#00d7d7"&gt;list&lt;/font&gt;, name, &lt;font color="#ff7f00"&gt;1&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;21 &lt;/font&gt;          &lt;font color="#0089ff"&gt;def&lt;/font&gt; &lt;font color="#00d7d7"&gt;enter&lt;/font&gt;(self, n):&lt;br /&gt;&lt;font color="#d7d700"&gt;22 &lt;/font&gt;               &lt;font color="#0089ff"&gt;print&lt;/font&gt; self.&lt;font color="#00d7d7"&gt;list&lt;/font&gt;[n - &lt;font color="#ff7f00"&gt;1&lt;/font&gt;]&lt;br /&gt;&lt;font color="#d7d700"&gt;23 &lt;/font&gt;               GetProcNamesFromStruct(self.&lt;font color="#00d7d7"&gt;list&lt;/font&gt;[n - &lt;font color="#ff7f00"&gt;1&lt;/font&gt;])&lt;br /&gt;&lt;font color="#d7d700"&gt;24 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;25 &lt;/font&gt;aidx = GetFirstStrucIdx()&lt;br /&gt;&lt;font color="#d7d700"&gt;26 &lt;/font&gt;j = GetStrucQty()&lt;br /&gt;&lt;font color="#d7d700"&gt;27 &lt;/font&gt;structs = []&lt;br /&gt;&lt;font color="#d7d700"&gt;28 &lt;/font&gt;&lt;font color="#0089ff"&gt;while&lt;/font&gt; j:&lt;br /&gt;&lt;font color="#d7d700"&gt;29 &lt;/font&gt;          name = GetStrucName(GetStrucId(idx))&lt;br /&gt;&lt;font color="#d7d700"&gt;30 &lt;/font&gt;          structs.append(name)&lt;br /&gt;&lt;font color="#d7d700"&gt;31 &lt;/font&gt;          idx = GetNextStrucIdx(idx)&lt;br /&gt;&lt;font color="#d7d700"&gt;32 &lt;/font&gt;          j -= &lt;font color="#ff7f00"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;33 &lt;/font&gt;schoose = StructChooser(structs)&lt;br /&gt;&lt;font color="#d7d700"&gt;34 &lt;/font&gt;schoose.choose()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После выполнения выше упомянутая таблица виртуальных функции в IDA приобрела такой вид:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F74 &lt;/span&gt;&lt;span style="color:navy"&gt;off_30556F74    dd offset &lt;/span&gt;IExchExtCallback_QueryInterface&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F74                                         &lt;/span&gt;&lt;span style="color:#8080ff"&gt;; DATA XREF: sub_30556F42+Co&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F74                                         &lt;/span&gt;&lt;span style="color:#8080ff"&gt;; sub_3056E00C+Eo&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;.text:30556F78                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_AddRef&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F7C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_Release&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F80                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetVersion&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F84                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetWindow&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F88                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetMenu&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F8C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetToolbar&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F90                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetSession&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F94                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetObjectA&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F98                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetSelectionCount&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556F9C                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetSelectionItem&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FA0                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetMenuPos&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FA4                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetSharedExtsDir&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FA8                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetRecipients&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FAC                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_SetRecipients&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FB0                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_GetNewMessageSite&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FB4                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_RegisterModeless&lt;br /&gt;&lt;span style="color:gray"&gt;.text:30556FB8                 &lt;/span&gt;&lt;span style="color:navy"&gt;dd offset &lt;/span&gt;IExchExtCallback_ChooseFolder&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-9125888953472337266?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/9125888953472337266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=9125888953472337266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/9125888953472337266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/9125888953472337266'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/10/com-intreface-stuff.html' title='COM intreface stuff...'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-8291214108504790995</id><published>2008-10-03T04:44:00.000-07:00</published><updated>2008-10-03T04:50:48.742-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idapython'/><category scheme='http://www.blogger.com/atom/ns#' term='ida'/><title type='text'>GetProcAddress helper</title><content type='html'>Довольно часто встречается такой код&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480C1&lt;br /&gt;.text:010480C1     &lt;/span&gt;&lt;span style="color:navy"&gt;loc_10480C1:                            &lt;/span&gt;&lt;span style="color:green"&gt;; CODE XREF: EMS_ThreadFindDrives(THREAD_PARMS *)+19j&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C1                                             &lt;/span&gt;&lt;span style="color:green"&gt;; EMS_ThreadFindDrives(THREAD_PARMS *)+2Dj&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C1 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     eax, &lt;/span&gt;HINSTANCE__ * JetApi&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480C6 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;cmp     eax, ebx&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C8 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;jz      loc_10481CB&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480CE &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     esi, ds:&lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480D4 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupprepar &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupPrepareW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480D9 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    eax             &lt;/span&gt;; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480DA &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480DC &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupgetdat &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupGetDatabaseNamesW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480E1 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     dword_10CFB30, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480E6 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480EC &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480EE &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupread &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupRead&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480F3 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     dword_10CFB34, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480F8 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480FE &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048100 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupclose &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupClose&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048105 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     dword_10CFB38, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:0104810A &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:01048110 &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048112 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupopenfi &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupOpenFileW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048117 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     dword_10CFB3C, eax&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Руками давать имена двордам, в которые пишутся результаты выполнения GetProcAddress довольно муторно и лень =). Посему накропал тут quick and dirty скрипт для автоматизации сего дейстивия.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 1 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; idc&lt;br /&gt;&lt;font color="#d7d700"&gt; 2 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; idautils&lt;br /&gt;&lt;font color="#d7d700"&gt; 3 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; re&lt;br /&gt;&lt;font color="#d7d700"&gt; 4 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 5 &lt;/font&gt;p = re.&lt;font color="#00d7d7"&gt;compile&lt;/font&gt;(&lt;font color="#ff7f00"&gt;&amp;quot;mov\s+(.*),\s+eax&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt; 6 &lt;/font&gt;loc = idc.LocByName(&lt;font color="#ff7f00"&gt;&amp;quot;__imp__GetProcAddress@8&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt; 7 &lt;/font&gt;&lt;font color="#0089ff"&gt;for&lt;/font&gt; ea &lt;font color="#0089ff"&gt;in&lt;/font&gt; idautils.CodeRefsTo(loc, &lt;font color="#00d7a3"&gt;True&lt;/font&gt;):&lt;br /&gt;&lt;font color="#d7d700"&gt; 8 &lt;/font&gt;     t_ea = ea&lt;br /&gt;&lt;font color="#d7d700"&gt; 9 &lt;/font&gt;     push_count = &lt;font color="#ff7f00"&gt;0&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;10 &lt;/font&gt;     &lt;font color="#0089ff"&gt;while&lt;/font&gt; push_count &amp;lt; &lt;font color="#ff7f00"&gt;2&lt;/font&gt;:&lt;br /&gt;&lt;font color="#d7d700"&gt;11 &lt;/font&gt;          &lt;font color="#0089ff"&gt;while&lt;/font&gt; idc.GetDisasm(t_ea).find(&lt;font color="#ff7f00"&gt;&amp;quot;push&amp;quot;&lt;/font&gt;) == -&lt;font color="#ff7f00"&gt;1&lt;/font&gt;:&lt;br /&gt;&lt;font color="#d7d700"&gt;12 &lt;/font&gt;               t_ea = idc.PrevHead(t_ea, &lt;font color="#ff7f00"&gt;0&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;13 &lt;/font&gt;          t_ea = idc.PrevHead(t_ea, &lt;font color="#ff7f00"&gt;0&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;14 &lt;/font&gt;          push_count += &lt;font color="#ff7f00"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;15 &lt;/font&gt;     t_ea = idc.NextHead(t_ea, SegEnd(t_ea))&lt;br /&gt;&lt;font color="#d7d700"&gt;16 &lt;/font&gt;     func_name_ea = Dword(t_ea + &lt;font color="#ff7f00"&gt;1&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;17 &lt;/font&gt;     func_name = &lt;font color="#ff7f00"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;18 &lt;/font&gt;     &lt;font color="#0089ff"&gt;while&lt;/font&gt; idc.Byte(func_name_ea):&lt;br /&gt;&lt;font color="#d7d700"&gt;19 &lt;/font&gt;          func_name += &lt;font color="#ff7f00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#a3d700"&gt;%c&lt;/font&gt;&lt;font color="#ff7f00"&gt;&amp;quot;&lt;/font&gt; % Byte(func_name_ea)&lt;br /&gt;&lt;font color="#d7d700"&gt;20 &lt;/font&gt;          func_name_ea += &lt;font color="#ff7f00"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;21 &lt;/font&gt;     &lt;font color="#0089ff"&gt;while&lt;/font&gt; &lt;font color="#0089ff"&gt;not&lt;/font&gt; p.match(idc.GetDisasm(ea)):&lt;br /&gt;&lt;font color="#d7d700"&gt;22 &lt;/font&gt;          ea = idc.NextHead(ea, SegEnd(ea))&lt;br /&gt;&lt;font color="#d7d700"&gt;23 &lt;/font&gt;     MakeNameEx(LocByName(p.match(idc.GetDisasm(ea)).groups(&lt;font color="#ff7f00"&gt;1&lt;/font&gt;)[&lt;font color="#ff7f00"&gt;0&lt;/font&gt;]), func_name, idc.SN_NOCHECK)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После выполения код, приведенный в начале поста, выглядит так&lt;br /&gt;&lt;pre&gt;&lt;span style="color:black"&gt;.text:010480C1&lt;br /&gt;.text:010480C1     &lt;/span&gt;&lt;span style="color:navy"&gt;loc_10480C1:                            &lt;/span&gt;&lt;span style="color:green"&gt;; CODE XREF: EMS_ThreadFindDrives(THREAD_PARMS *)+19j&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C1                                             &lt;/span&gt;&lt;span style="color:green"&gt;; EMS_ThreadFindDrives(THREAD_PARMS *)+2Dj&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C1 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     eax, &lt;/span&gt;HINSTANCE__ * JetApi&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480C6 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;cmp     eax, ebx&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480C8 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;jz      loc_10481CB&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480CE &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     esi, ds:&lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480D4 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupprepar &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupPrepareW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480D9 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    eax             &lt;/span&gt;; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480DA &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480DC &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupgetdat &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupGetDatabaseNamesW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480E1 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     &lt;/span&gt;HrBackupPrepareW&lt;span style="color:navy"&gt;, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480E6 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480EC &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480EE &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupread &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupRead&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480F3 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     &lt;/span&gt;HrBackupGetDatabaseNamesW&lt;span style="color:navy"&gt;, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:010480F8 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:010480FE &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048100 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupclose &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupClose&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048105 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     &lt;/span&gt;HrBackupRead&lt;span style="color:navy"&gt;, eax&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:0104810A &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    &lt;/span&gt;HINSTANCE__ * JetApi ; hModule&lt;br /&gt;&lt;span style="color:black"&gt;.text:01048110 &lt;/span&gt;&lt;span style="color:green"&gt;038                 &lt;/span&gt;&lt;span style="color:navy"&gt;call    esi &lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;/span&gt;&lt;span style="color:#ff00ff"&gt;GetProcAddress(x,x)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048112 &lt;/span&gt;&lt;span style="color:green"&gt;030                 &lt;/span&gt;&lt;span style="color:navy"&gt;push    offset aHrbackupopenfi &lt;/span&gt;&lt;span style="color:gray"&gt;; &amp;quot;HrBackupOpenFileW&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black"&gt;.text:01048117 &lt;/span&gt;&lt;span style="color:green"&gt;034                 &lt;/span&gt;&lt;span style="color:navy"&gt;mov     &lt;/span&gt;HrBackupClose&lt;span style="color:navy"&gt;, eax&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-8291214108504790995?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/8291214108504790995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=8291214108504790995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/8291214108504790995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/8291214108504790995'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/10/getprocaddress-helper.html' title='GetProcAddress helper'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-1601065080018063712</id><published>2008-09-03T07:20:00.000-07:00</published><updated>2008-09-04T01:56:02.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idapython'/><category scheme='http://www.blogger.com/atom/ns#' term='ida'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='idc'/><title type='text'>Экспорт структур из idb в idc</title><content type='html'>Наваял тут на днях скрипт под &lt;a href="http://code.google.com/p/idapython/"&gt;idapython&lt;/a&gt; для сабжа. Показывает резалты в "симпотишном" окошке откуда их можно скопировать в буфер обмена и вставить в другое не менее "симпотишное" окошко, которое появлятся по Shift+F2. Предусмотрена также возможность сохранения в файл. Красивое форматирование наличествует =)&lt;br /&gt;&lt;a href="http://www.justupit.com/get.php?id=17c3f014edf44492e502e90a710034ae"&gt;линк раз&lt;/a&gt;&lt;br /&gt;&lt;a href="http://nobodyzzz.site.uvaga.by/export_struct.py"&gt;линк два&lt;/a&gt;&lt;br /&gt;&lt;a href="http://nopaste.info/2af70c2cf3.html"&gt;ну и на крайняк&lt;/a&gt;&lt;br /&gt;P.S. Едва не забыл, для того что бы скрипт корректно работал, надо исправить функцию GetMemberStrId в файле idc.py. Для этого строку&lt;br /&gt;&lt;code&gt;cs = idaapi.get_member_struc(m)&lt;/code&gt; надо заменить на &lt;code&gt;cs = idaapi.get_sptr(m)&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-1601065080018063712?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/1601065080018063712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=1601065080018063712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/1601065080018063712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/1601065080018063712'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/09/idb-idc.html' title='Экспорт структур из idb в idc'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-5251700760338816470</id><published>2008-08-29T03:25:00.000-07:00</published><updated>2008-08-29T03:37:59.531-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><title type='text'>Сортировка по журналам LJ в gmail</title><content type='html'>Навеяно &lt;a href="http://syslog.net.ru/%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BF%D0%BE-%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%B0%D0%BC-lj-21/"&gt;&lt;br /&gt;этим&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Если подписаться на комментарии в ЖЖ, то приходящие письма имеют очень удобное для сортировки поле X-Lj-Journal, например "X-Lj-Journal: ru_debian". &lt;/blockquote&gt;&lt;br /&gt;по ссылке написано как реализовать сортировку при помощи набора правил для &lt;a href="http://www.procmail.org/"&gt;procmail&lt;/a&gt;&lt;br /&gt;И так на потребуется &lt;a href="http://www.python.org/"&gt;python&lt;/a&gt; + &lt;a href="http://libgmail.sourceforge.net/"&gt;libgmail&lt;/a&gt;&lt;br /&gt;вот небольшой скрипт, который релизует сортировку для gmail'a(я так думаю это актуально для пользователей веб-интерфейса)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 1 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; libgmail&lt;br /&gt;&lt;font color="#d7d700"&gt; 2 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; email&lt;br /&gt;&lt;font color="#d7d700"&gt; 3 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 4 &lt;/font&gt;&lt;font color="#0089ff"&gt;if&lt;/font&gt; __name__ == &lt;font color="#ff7f00"&gt;&amp;quot;__main__&amp;quot;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#d7d700"&gt; 5 &lt;/font&gt;     ga = libgmail.GmailAccount(&lt;font color="#ff7f00"&gt;&amp;quot;************@gmail.com&amp;quot;&lt;/font&gt;, &lt;font color="#ff7f00"&gt;&amp;quot;******&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt; 6 &lt;/font&gt;     ga.login()&lt;br /&gt;&lt;font color="#d7d700"&gt; 7 &lt;/font&gt;     folder = ga.getUnreadMessages()&lt;br /&gt;&lt;font color="#d7d700"&gt; 8 &lt;/font&gt;     &lt;font color="#0089ff"&gt;for&lt;/font&gt; thread &lt;font color="#0089ff"&gt;in&lt;/font&gt; folder:&lt;br /&gt;&lt;font color="#d7d700"&gt; 9 &lt;/font&gt;          msg = email.message_from_string(thread[&lt;font color="#ff7f00"&gt;0&lt;/font&gt;].source)&lt;br /&gt;&lt;font color="#d7d700"&gt;10 &lt;/font&gt;          label = msg.get(&lt;font color="#ff7f00"&gt;'X-Lj-Journal'&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;11 &lt;/font&gt;          &lt;font color="#0089ff"&gt;if&lt;/font&gt; label:&lt;br /&gt;&lt;font color="#d7d700"&gt;12 &lt;/font&gt;               label = &lt;font color="#ff7f00"&gt;'LJ Comment&lt;/font&gt;&lt;font color="#a3d700"&gt;\\&lt;/font&gt;&lt;font color="#ff7f00"&gt;'&lt;/font&gt; + label&lt;br /&gt;&lt;font color="#d7d700"&gt;13 &lt;/font&gt;               &lt;font color="#0089ff"&gt;if&lt;/font&gt; &lt;font color="#0089ff"&gt;not&lt;/font&gt; label &lt;font color="#0089ff"&gt;in&lt;/font&gt; ga.getLabelNames(&lt;font color="#00d7a3"&gt;True&lt;/font&gt;):&lt;br /&gt;&lt;font color="#d7d700"&gt;14 &lt;/font&gt;                    ga.createLabel(label)&lt;br /&gt;&lt;font color="#d7d700"&gt;15 &lt;/font&gt;               thread.addLabel(label)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-5251700760338816470?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/5251700760338816470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=5251700760338816470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/5251700760338816470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/5251700760338816470'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/08/lj-gmail.html' title='Сортировка по журналам LJ в gmail'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2825705681994682632.post-7046922741553403777</id><published>2008-08-26T06:11:00.001-07:00</published><updated>2008-09-04T01:57:09.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ida'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Скрипт для вытягивани имен локальных переменных из pdb</title><content type='html'>&lt;p&gt;Ковыряю сейчас одну программу для которой есть ну очень подробная pdb =), в которой есть буквально все: имена и прототипы процедур и функций, имена локальных перменных, определения структур, вообщем рай.&lt;/p&gt;  &lt;p&gt;Я не знаю никакой приблуды для IDA, которая бы добоваляла всю инфу(не только имена меток, процедур и имена глобальных перенных), посему часть инфы(имена параметров функций, локальных переменных и структуры) приходиться вбивать руками. Я существо ленивое =) и наваял небольшой скрипт на python, который по выводу &lt;a href="http://msdn.microsoft.com/en-us/library/b5ke49f5.aspx"&gt;Dia2Dump&lt;/a&gt; генерить скрипт на idc(хехе я знаю толк в извращениях =))&lt;/p&gt;  &lt;p&gt;Собственно вот код скрипта:&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;font color="#d7d700"&gt; 1 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; re&lt;br /&gt;&lt;font color="#d7d700"&gt; 2 &lt;/font&gt;&lt;font color="#0089ff"&gt;import&lt;/font&gt; sys&lt;br /&gt;&lt;font color="#d7d700"&gt; 3 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt; 4 &lt;/font&gt;pat = re.&lt;font color="#00d7d7"&gt;compile&lt;/font&gt;(&lt;font color="#ff7f00"&gt;r&amp;quot;Data\s+:\s+e[bs]p Relative,\s+\[(.*)\],\s+Local,\s+Type:\s+(.*),\s+(.*)&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt; 5 &lt;/font&gt;vpat = re.&lt;font color="#00d7d7"&gt;compile&lt;/font&gt;(&lt;font color="#ff7f00"&gt;r&amp;quot;\s+VirtualAddress:\s+(.*)&amp;quot;&lt;/font&gt;);&lt;br /&gt;&lt;font color="#d7d700"&gt; 6 &lt;/font&gt;name_offset = []&lt;br /&gt;&lt;font color="#d7d700"&gt; 7 &lt;/font&gt;&lt;font color="#0089ff"&gt;for&lt;/font&gt; line &lt;font color="#0089ff"&gt;in&lt;/font&gt; sys.stdin:&lt;br /&gt;&lt;font color="#d7d700"&gt; 8 &lt;/font&gt;     m = pat.match(line)&lt;br /&gt;&lt;font color="#d7d700"&gt; 9 &lt;/font&gt;     &lt;font color="#0089ff"&gt;if&lt;/font&gt; m:&lt;br /&gt;&lt;font color="#d7d700"&gt;10 &lt;/font&gt;          x = &lt;font color="#00d7d7"&gt;int&lt;/font&gt;(m.group(&lt;font color="#ff7f00"&gt;1&lt;/font&gt;), &lt;font color="#ff7f00"&gt;0x10&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;11 &lt;/font&gt;          x = ~x&lt;br /&gt;&lt;font color="#d7d700"&gt;12 &lt;/font&gt;          x &amp;amp;= &lt;font color="#ff7f00"&gt;0xFFFFFFFF&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;13 &lt;/font&gt;          x += &lt;font color="#ff7f00"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;14 &lt;/font&gt;          name_offset.append((x, m.group(&lt;font color="#ff7f00"&gt;3&lt;/font&gt;)))&lt;br /&gt;&lt;font color="#d7d700"&gt;15 &lt;/font&gt;     &lt;font color="#0089ff"&gt;else&lt;/font&gt;:&lt;br /&gt;&lt;font color="#d7d700"&gt;16 &lt;/font&gt;          m = vpat.match(line)&lt;br /&gt;&lt;font color="#d7d700"&gt;17 &lt;/font&gt;          &lt;font color="#0089ff"&gt;if&lt;/font&gt; m:&lt;br /&gt;&lt;font color="#d7d700"&gt;18 &lt;/font&gt;               va = &lt;font color="#00d7d7"&gt;int&lt;/font&gt; (m.group(&lt;font color="#ff7f00"&gt;1&lt;/font&gt;), &lt;font color="#ff7f00"&gt;0x10&lt;/font&gt;)&lt;br /&gt;&lt;font color="#d7d700"&gt;19 &lt;/font&gt;&lt;font color="#0089ff"&gt;if&lt;/font&gt; &lt;font color="#00d7d7"&gt;len&lt;/font&gt;(name_offset):&lt;br /&gt;&lt;font color="#d7d700"&gt;20 &lt;/font&gt;     &lt;font color="#0089ff"&gt;print&lt;/font&gt; &lt;font color="#ff7f00"&gt;'''&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;21 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     auto id, i, firstM, lastM, address, offset, mSize;&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;22 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;23 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;24 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     address = MinEA() + 0x&lt;/font&gt;&lt;font color="#a3d700"&gt;%X&lt;/font&gt;&lt;font color="#ff7f00"&gt; - 0x1000;&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;25 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     id = GetFrame(address);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;26 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     firstM = GetFirstMember(id);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;27 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     lastM = GetLastMember(id);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;28 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     offset = GetFrameLvarSize(address);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;29 &lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;30 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     for(i = firstM;i &amp;lt;= lastM;i = i + GetMemberSize(id, i))&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;31 &lt;/font&gt;&lt;font color="#ff7f00"&gt;     {&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;32 &lt;/font&gt;&lt;font color="#ff7f00"&gt;          mSize = GetMemberSize(id, i);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;33 &lt;/font&gt;&lt;font color="#ff7f00"&gt;          while( mSize == -1)&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;34 &lt;/font&gt;&lt;font color="#ff7f00"&gt;          {&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;35 &lt;/font&gt;&lt;font color="#ff7f00"&gt;               i++;&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;36 &lt;/font&gt;&lt;font color="#ff7f00"&gt;               mSize = GetMemberSize(id, i);&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;37 &lt;/font&gt;&lt;font color="#ff7f00"&gt;          }&lt;/font&gt;&lt;br /&gt;&lt;font color="#d7d700"&gt;38 &lt;/font&gt;&lt;font color="#ff7f00"&gt;          '''&lt;/font&gt; % (va)&lt;br /&gt;&lt;font color="#d7d700"&gt;39 &lt;/font&gt;     &lt;font color="#0089ff"&gt;for&lt;/font&gt; no &lt;font color="#0089ff"&gt;in&lt;/font&gt; name_offset:&lt;br /&gt;&lt;font color="#d7d700"&gt;40 &lt;/font&gt;          &lt;font color="#0089ff"&gt;print&lt;/font&gt; &lt;font color="#ff7f00"&gt;'&lt;/font&gt;&lt;font color="#a3d700"&gt;\t\t&lt;/font&gt;&lt;font color="#ff7f00"&gt;if ((offset - i) == 0x&lt;/font&gt;&lt;font color="#a3d700"&gt;%X&lt;/font&gt;&lt;font color="#ff7f00"&gt;) Message(&amp;quot;&lt;/font&gt;&lt;font color="#a3d700"&gt;%%&lt;/font&gt;&lt;font color="#ff7f00"&gt;08X&lt;/font&gt;&lt;font color="#a3d700"&gt;\\&lt;/font&gt;&lt;font color="#ff7f00"&gt;n&amp;quot;, SetMemberName(id, i, &amp;quot;&lt;/font&gt;&lt;font color="#a3d700"&gt;%s&lt;/font&gt;&lt;font color="#ff7f00"&gt;&amp;quot;));'&lt;/font&gt; % no&lt;br /&gt;&lt;font color="#d7d700"&gt;41 &lt;/font&gt;     &lt;font color="#0089ff"&gt;print&lt;/font&gt; &lt;font color="#ff7f00"&gt;'&lt;/font&gt;&lt;font color="#a3d700"&gt;\t&lt;/font&gt;&lt;font color="#ff7f00"&gt;}'&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Использовать так:&lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Cour"&gt;Dia2Dump.exe -sym 0xXXX YYYY.pdb | stack_vars.py&lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;У меня стоит &lt;a href="http://unxutils.sourceforge.net/"&gt;это&lt;/a&gt; и я обычно пишу&lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Cour"&gt;Dia2Dump.exe -sym 0xXXX YYYY.pdb | stack_vars.py | gclip&lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;потом в иде жму Shift+F2 Ctrl+V и OK =) (gclip утилита, которая читает из stdin в клипбоард)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2825705681994682632-7046922741553403777?l=nobodyzzz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobodyzzz.blogspot.com/feeds/7046922741553403777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2825705681994682632&amp;postID=7046922741553403777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/7046922741553403777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2825705681994682632/posts/default/7046922741553403777'/><link rel='alternate' type='text/html' href='http://nobodyzzz.blogspot.com/2008/08/pdb.html' title='Скрипт для вытягивани имен локальных переменных из pdb'/><author><name>nobodyzzz</name><uri>http://www.blogger.com/profile/13334561715775499635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
