<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2russianfull.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">

<channel>
	<title>Not a kernel guy</title>
	
	<link>http://blog.not-a-kernel-guy.com</link>
	<description>... in the Windows kernel team</description>
	<pubDate>Wed, 06 Aug 2008 04:56:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/not-a-kernel-guy" type="application/rss+xml" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/not-a-kernel-guy" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fnot-a-kernel-guy" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item>
		<title>Хозяйке на заметку.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/08/05/329</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/08/05/329#comments</comments>
		<pubDate>Wed, 06 Aug 2008 04:54:50 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Маленькие хитрости]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/08/05/329</guid>
		<description><![CDATA[Чтобы войти на машину с благозвучным названием &#8220;6XSD29G-052-18XS_32&#8221; под локальным пользователем, не нужно набивать полное имя пользователя как &#8220;6XSD29G-052-18XS_32\vasya&#8221;, проклиная при этом злого гения, запретившего Copy-Paste в поле ввода имени, и его коллегу, давшему компьютеру такое замечательное имя. Достаточно просто сказать &#8220;.\vasya&#8221; и все получится.
PS. Знал бы об этом пять лет назад &#8211; день жизни [...]]]></description>
			<content:encoded><![CDATA[<p>Чтобы войти на машину с благозвучным названием &#8220;6XSD29G-052-18XS_32&#8221; под локальным пользователем, не нужно набивать полное имя пользователя как &#8220;6XSD29G-052-18XS_32\vasya&#8221;, проклиная при этом злого гения, запретившего Copy-Paste в поле ввода имени, и его коллегу, давшему компьютеру такое замечательное имя. Достаточно просто сказать &#8220;.\vasya&#8221; и все получится.</p>
<p>PS. Знал бы об этом пять лет назад &#8211; день жизни сэкономил бы уже наверное. Хотя мог бы и сам догадаться&#8230; <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=71MyNI"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=71MyNI" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=A4DU1K"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=A4DU1K" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=MQekTK"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=MQekTK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=jq2IFk"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=jq2IFk" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/08/05/329/feed</wfw:commentRss>
		</item>
		<item>
		<title>Detours.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/08/04/327</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/08/04/327#comments</comments>
		<pubDate>Tue, 05 Aug 2008 06:11:46 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Code patching]]></category>

		<category><![CDATA[Reverse engineering]]></category>

		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/?p=327</guid>
		<description><![CDATA[Сижу, разбираюсь как Detours перехватывает функции Win32 API. Сама идея известна. В начало функции пишется безусловный JMP на функцию перехватчик. Для того, чтобы вызвать оригинальную функции, её код, на место которого помещается JMP, копируется в буфер и дополняется безусловным JMP на первую нетронутую инструкцию. 
Интересно, однако, не это, а сколько дополнительных проверок делается, чтобы повысить [...]]]></description>
			<content:encoded><![CDATA[<p>Сижу, разбираюсь как <a href="http://research.microsoft.com/sn/detours/">Detours</a> перехватывает функции Win32 API. Сама идея известна. В начало функции пишется безусловный JMP на функцию перехватчик. Для того, чтобы вызвать оригинальную функции, её код, на место которого помещается JMP, копируется в буфер и дополняется безусловным JMP на первую нетронутую инструкцию. </p>
<p>Интересно, однако, не это, а сколько дополнительных проверок делается, чтобы повысить надежность этого метода:</p>
<ol>
<li>Поверяется, не указывает ли указатель на перехватываемую функцию, не на саму функцию, а на элемент таблицы импорта. Если так, то в качестве указателя берется imm32 из JMP;</li>
<li>Проверяется длина функции, причем считается, что функция может завершаться RET, JMP (разные варианты) или INT3. Последние два варианта не очень очевидны, хотя при взгляде на код становится ясно, что к чему;</li>
<li>После JMP, завершающего скопированный из функции код, пишется INT3. То же, на всякий случай;</li>
<li>Код установки перехватчиков завернут в транзакцию. Устанавливаются (или снимаются) либо все перехватчики, либо транзакция откатывается. Впрочем, 100% гарантии это все равно не дает;</li>
<li>Ну и плюс ко всему поддерживается статическая установка перехватчиков, как раз чтобы избежать проблем с динамическим перехватом.</li>
</ol>
<p>В этом списке не хватает только поддержки <a href="http://technet2.microsoft.com/windowsserver/en/library/a578a2f2-8875-47f3-9738-f23a27546ddf1033.mspx?mfr=true">hotpatching</a>. Код, скомпилированный с поддержкой hotpatching можно править прямо на ходу, не останавливая потоки в процессе.</p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=TTEwN5"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=TTEwN5" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=vEvs2K"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=vEvs2K" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=rivuZK"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=rivuZK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=CXvLMk"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=CXvLMk" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/08/04/327/feed</wfw:commentRss>
		</item>
		<item>
		<title>Обновился до WordPress 2.6.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/08/03/324</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/08/03/324#comments</comments>
		<pubDate>Sun, 03 Aug 2008 19:50:35 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[default]]></category>

		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/?p=324</guid>
		<description><![CDATA[Обновился до WordPress 2.6. Вроде ничего не потерял по дороге. Если что-то все-таки отвалилось – пишите.
]]></description>
			<content:encoded><![CDATA[<p>Обновился до <a href="http://wordpress.org/">WordPress 2.6</a>. Вроде ничего не потерял по дороге. Если что-то все-таки отвалилось – пишите.</p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=exedEw"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=exedEw" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=NEr7wK"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=NEr7wK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=4l1iRK"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=4l1iRK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=gnqLIk"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=gnqLIk" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/08/03/324/feed</wfw:commentRss>
		</item>
		<item>
		<title>diStorm64 disassembler.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/31/323</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/31/323#comments</comments>
		<pubDate>Fri, 01 Aug 2008 05:51:40 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[64bit]]></category>

		<category><![CDATA[Disassembler]]></category>

		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/31/323</guid>
		<description><![CDATA[Наткнулся на хороший open source disassembler, понимающий и 80&#215;86 и amd64, и распространяемый под BSD лицензией: diStorm64. 
diStorm is a binary stream disassembler. It&#8217;s capable of disassembling 80&#215;86 instructions in 64 bits (AMD64, X86-64) and both in 16 and 32 bits. In addition, it disassembles FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow! (w/ extensions), [...]]]></description>
			<content:encoded><![CDATA[<p>Наткнулся на хороший open source disassembler, понимающий и 80&#215;86 и amd64, и распространяемый под BSD лицензией: <a href="http://www.ragestorm.net/distorm/">diStorm64</a>. </p>
<blockquote><p>diStorm is a binary stream disassembler. It&#8217;s capable of disassembling 80&#215;86 instructions in 64 bits (AMD64, X86-64) and both in 16 and 32 bits. In addition, it disassembles FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow! (w/ extensions), new x86-64 instruction sets, VMX, and AMD&#8217;s SVM! diStorm was written to decode quickly every instruction as accurately as possible. Robust decoding, while taking special care for valid or unused prefixes, is what makes this disassembler powerful, especially for research. Another benefit that might come in handy is that the module was written as multi-threaded, which means you could disassemble several streams or more simultaneously.</p>
</blockquote>
<p>В использовании прост как двери: на входе даётся кусок кода, разрядность и его виртуальный адрес, на выходе получается набор инструкций. Для каждой указывается мнемоника, операнды, префиксы и размер. В комплекте идет интерфейсный модуль для Python, что может быть полезно для всяких reverse engineering утилит. </p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=OREK9L"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=OREK9L" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=jzjD6K"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=jzjD6K" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=IKUACK"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=IKUACK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=o4T3Gk"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=o4T3Gk" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/31/323/feed</wfw:commentRss>
		</item>
		<item>
		<title>Чем плоха удалённая работа?</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/22/322</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/22/322#comments</comments>
		<pubDate>Tue, 22 Jul 2008 16:31:22 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Удалённая работа]]></category>

		<category><![CDATA[Юмор]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/22/322</guid>
		<description><![CDATA[Прелесть какая.  



А что плохого в телекоммьюте?
телекоммют плох там, где работает команда, где есть постоянный обмен идеями, где восклицание &#8220;@#$#@$@#$!!!!&#8221;, сказанное в адрес чьего-то кода, слышит весь тим.

Напишите &#8220;@#$#@$@#$!!!!&#8221; в комментариях.

Народ почитает-посмеётся. Это кто найдет. И всё.
А вот когда тоже самое бывает сказано тихим рыком на басах, с варварским восточно-европейским акцентом, то эффект совсем [...]]]></description>
			<content:encoded><![CDATA[<p>Прелесть какая. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<blockquote>
<blockquote>
<blockquote>
<blockquote><p>А что плохого в телекоммьюте?</p></blockquote>
<p>телекоммют плох там, где работает команда, где есть постоянный обмен идеями, где восклицание &#8220;@#$#@$@#$!!!!&#8221;, сказанное в адрес чьего-то кода, слышит весь тим.
</p></blockquote>
<p>Напишите &#8220;@#$#@$@#$!!!!&#8221; в комментариях.
</p></blockquote>
<p>Народ почитает-посмеётся. Это кто найдет. И всё.</p>
<p>А вот когда тоже самое бывает сказано тихим рыком на басах, с варварским восточно-европейским акцентом, то эффект совсем другой. Виновный нервно дергается, судорожно просматривает свои последние коммиты, одновременно собирает в жменю блокнот и карандаш, т.к. знает что сейчас к нему придут и начнутся подвалы лубянки. Прочие (пока) непричастные вжимаются в клавиатуры, можно сказать врастая в код, и делая вид что их тут совсем почти нет. Ну разве в телекоммюте такое возможно?
</p></blockquote>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=Et0VLu"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=Et0VLu" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=HAgrCJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=HAgrCJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=u0GygJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=u0GygJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=Mpu1Dj"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=Mpu1Dj" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/22/322/feed</wfw:commentRss>
		</item>
		<item>
		<title>Проверка параметров функции.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/21/321</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/21/321#comments</comments>
		<pubDate>Tue, 22 Jul 2008 06:17:55 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Безопасность]]></category>

		<category><![CDATA[Дизайн]]></category>

		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/21/321</guid>
		<description><![CDATA[Предыдущий пост про параметры функций вызвал на удивление много споров, так что я еще покручусь немного вокруг этой темы. Заранее прошу прощения у тех, кому эта тема оскомину набила. Итак, как следует проверять параметры функции? Вернее даже так, что нужно и, самое главное, что не нужно проверять?
Само собой однозначного ответа на этот вопрос не существует, [...]]]></description>
			<content:encoded><![CDATA[<p>Предыдущий <a href="http://blog.not-a-kernel-guy.com/2008/06/30/316">пост про параметры функций</a> вызвал на удивление много споров, так что я еще покручусь немного вокруг этой темы. Заранее прошу прощения у тех, кому эта тема оскомину набила. Итак, как следует проверять параметры функции? Вернее даже так, что нужно и, самое главное, что не нужно проверять?</p>
<p>Само собой однозначного ответа на этот вопрос не существует, тем более что этот вопрос вторгается в область coding guidelines, а последних, как известно, существует ровно столько, сколько есть программистов на Земле. Или около того. Как минимум ответ зависит от следующих факторов:</p>
<ol>
<li>Языка программирования, операционной системы и программного окружения; </li>
<li>Степени доверия вызываемой функции к вызывающему коду. </li>
</ol>
<p>Пункт №1 мы, во избежание священной войны, положим константой &#8211; язык C/C++, OS &#8211; Windows, окружение &#8211; &#171;обычный&#187; user/kernel mode код.</p>
<p>А вот пункт №2 стоит обсудить детально. Сравним два случая:</p>
<ol>
<li>Вызов функции внутри одного бинарного модуля; </li>
<li>Вызов сервиса ядра из пользовательского кода. </li>
</ol>
<p>В отличие от &#171;доверенного&#187; вызова, службы ядра дополнительно проверяют, что:</p>
<ol>
<li>Все буфера целиком находятся в user space (ProbeXxx функции); </li>
<li>Чтение/запись в user space завершается успешно (все операции с ними помещаются в блок try-except); </li>
<li>Чтение любых данных из user space выполняется только один раз (данные копируются в локальный буфер); </li>
<li>Все параметры, после того, как они были скопированы в kernel space, содержат допустимые значения (проверки на выход на пределы диапазона и прочее). </li>
</ol>
<p>Очевидно, что дополнительные проверки нужны потому, что пользовательский код менее привилегирован, чем код ядра, и более подвержен сбоям/атакам. Несколько менее очевидно, что дополнительные проверки на самом деле нужны потому, что сами данные приходят из менее привилегированного источника. О том, почему это важно &#8211; чуть ниже.</p>
<p>Далее, данные никогда не представлены сами по себе. Данные всегда упаковываются в некий &#171;контейнер&#187;. Контейнером могут быть языковые конструкции, например объект или переменная типа &#171;int&#187;, или другие данные, например TCP пакет упаковывается в IP пакет. Следует различать проверки целостности контейнера и проверки целостности данных. В примере выше, пункты №№1 &#8211; 3 представляют ни что иное, как проверку целостности контейнера (буфера в user space). Проверка целостности самих данных представлена единственным пунктом №4.</p>
<p>Нужно ли при каждом вызове выполнять все проверки? Конечно - нет. Какие проверки можно опустить? В приведенном примере с вызовом функции в пределах одного модуля, можно ожидать, что свойства контейнера с данными не изменятся. А если и изменятся, то только под воздействием внешних факторов, которые мы все равно не в состоянии контролировать (в пределах данного модуля). Соответственно, при &#171;доверенном&#187; вызове проверять целостность контейнера нецелесообразно. </p>
<p>Если отвлечься от абстрактных контейнеров, это означает что большинство указателей при &#171;доверенном&#187; вызове не проверяется. Более того, такая проверка может быть вредна, так как затрудняет отлов ошибок, пряча попытки некорректного разыменования указателей.</p>
<p>Количество проверок целостности самих данных тоже можно сократить до минимума &#8211; до одной. В теории, конечно. Для этого используется анализ потоков данных (Data Flow Analysis, DFD), суть которого состоит в том, что:</p>
<ol>
<li>Идентифицируются все участники обмена данными (т.е. все компоненты кода и внешние источники); </li>
<li>Определяются характер передаваемых данных, а также, откуда и куда они передаются; </li>
<li>Определяется уровень привилегированности каждого участника обмена данными. </li>
</ol>
<p>Передача данных от менее привилегированного к более привилегированному участнику считается передачей через границу доверия (Trust Boundary), при которой принимающая сторона должна проверить целостность полученных данных, включая как целостность контейнера, так и целостность данных. При составлении DFD диаграммы следует помнить, что данные (например, IP пакет) могут сами выступать в роли контейнера для другого компонента. В таком случае, для инкапсулированных данных граница доверия будет пролегать на один или несколько компонентов дальше.</p>
<p>Итак, резюме:</p>
<ol>
<li>Следует различать контейнер и сами данные, и понимать, что проверка их целостности может выполняться разными компонентами; </li>
<li>Проверка целостности контейнера выполняется только в случае, если передача данных идет через границу доверия. DFD диаграмма должна помочь в обнаружении всех границ доверия; </li>
<li>Проверка целостности данных производится первым потребителем этих данных. </li>
</ol>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=3PMcMa"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=3PMcMa" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=RnMXhJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=RnMXhJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=SKcztJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=SKcztJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=VkSduj"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=VkSduj" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/21/321/feed</wfw:commentRss>
		</item>
		<item>
		<title>Доктор Ужасный против капитана Молотка.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/18/320</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/18/320#comments</comments>
		<pubDate>Fri, 18 Jul 2008 20:20:35 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[default]]></category>

		<category><![CDATA[Юмор]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/18/320</guid>
		<description><![CDATA[А меня просто прёт переводить их имена буквально&#8230;
Подсмотрел у Реймонда Чена. Безумный ученый доктор Ужасный ведёт блог и непримирумую борьбу с капитаном Молотком за контроль над миром сердцем Копейки – девушки из прачечной «Отмывка Монет», с которой доктор уже месяц пытается заговорить. Кроме того, доктор Ужасный мечтает о вступлении в Лигу Зла, возглавляемой злодеем Хреновая [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: right;"><em>А меня просто прёт переводить их имена буквально&#8230;</em></div>
<p>Подсмотрел у Реймонда Чена. Безумный ученый доктор Ужасный ведёт блог и непримирумую борьбу с капитаном Молотком за контроль <span style="text-decoration: line-through;">над миром</span> сердцем Копейки – девушки из прачечной «Отмывка Монет», с которой доктор уже месяц пытается заговорить. Кроме того, доктор Ужасный мечтает о вступлении в Лигу Зла, возглавляемой злодеем Хреновая Лошадь, однако чтобы его прошение было одобрено, он должен совершить что-то по настоящему ужасное&#8230; </p>
<div style="text-align: center"><a href="http://www.drhorrible.com/act_I.html"><img src="http://www.drhorrible.com/images/banners/banner2.gif" border="0" alt="Dr. Horrible Sign Along Blog"/></a></div>
<p>Просмотр сего шедевра у меня выпал как раз на следующий день после просмотра последнего Бетмена. В общем, очень удачно наложилось. Третья часть выходит 19-ого.</p>
<p>PS: Видео хорошего качества – читай много мегабайт.</p>
<p>Update: Ролики убрали из свободного доступа. Кто не успел, тот опоздал.</p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=fOvKel"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=fOvKel" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=H4TQIJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=H4TQIJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=FlP1jJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=FlP1jJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=b6XxOj"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=b6XxOj" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/18/320/feed</wfw:commentRss>
		</item>
		<item>
		<title>Освободите шоколад!</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/14/319</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/14/319#comments</comments>
		<pubDate>Mon, 14 Jul 2008 19:58:35 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Юмор]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/14/319</guid>
		<description><![CDATA[Наш администратор, Katy, держит столик со сладостями: конфеты, батончики, орешки, жвачки и т.д. Все что нужно страдающим от недостатка сахара в крови разработчикам. 5 дней назад Katy ушла в отпуск. Сегодня на закрытой двери появились надписи: «Освободите шоколад!» и «Отпустите мои кофеты!»
Update: Дверь открыта! Конфеты свободны! 
]]></description>
			<content:encoded><![CDATA[<p>Наш администратор, Katy, держит столик со сладостями: конфеты, батончики, орешки, жвачки и т.д. Все что нужно страдающим от недостатка сахара в крови разработчикам. 5 дней назад Katy ушла в отпуск. Сегодня на закрытой двери появились надписи: «Освободите шоколад!» и «Отпустите мои кофеты!»</p>
<p><strong>Update</strong>: Дверь открыта! Конфеты свободны! <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=WwBuzD"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=WwBuzD" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=ibkGyJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=ibkGyJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=zGfMTJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=zGfMTJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=1vVMnj"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=1vVMnj" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/14/319/feed</wfw:commentRss>
		</item>
		<item>
		<title>Пустота.</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/09/318</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/09/318#comments</comments>
		<pubDate>Wed, 09 Jul 2008 21:20:29 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[default]]></category>

		<category><![CDATA[Астрономия и космос]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/09/318</guid>
		<description><![CDATA[Цитата с астрофорума:
Тогда корректно-ли следующее утверждение: если в пространстве приборы фиксируют хотя бы одно явление, это пространство не является ПУСТОТОЙ.
Некорректно. Даже если приборы в пространстве не фиксируют ни одного явления, оно не является пустотой. В нем есть приборы.
И действительно. 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.astronomy.ru/forum/index.php/topic,42301.msg740978.html#msg740978">Цитата с астрофорума</a>:</p>
<blockquote><p>Тогда корректно-ли следующее утверждение: если в пространстве приборы фиксируют хотя бы одно явление, это пространство не является ПУСТОТОЙ.</p></blockquote>
<blockquote><p>Некорректно. Даже если приборы в пространстве не фиксируют ни одного явления, оно не является пустотой. В нем есть приборы.</p></blockquote>
<p>И действительно. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=Q7vgKy"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=Q7vgKy" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=aEm31J"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=aEm31J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=3va6DJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=3va6DJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=oTwd9j"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=oTwd9j" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/09/318/feed</wfw:commentRss>
		</item>
		<item>
		<title>Смотри, мама, я в телевизоре!</title>
		<link>http://blog.not-a-kernel-guy.com/2008/07/09/317</link>
		<comments>http://blog.not-a-kernel-guy.com/2008/07/09/317#comments</comments>
		<pubDate>Wed, 09 Jul 2008 15:26:20 +0000</pubDate>
		<author>alexeypa@gmail.com (Not a kernel guy)</author>
		
		<category><![CDATA[itblogs]]></category>

		<category><![CDATA[Channel 9]]></category>

		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/07/09/317</guid>
		<description><![CDATA[Мое интервью Russian Channel 9:


PS: Забавно наблюдать за собой со стороны. Столько ляпов, просто жуть!  
]]></description>
			<content:encoded><![CDATA[<p>Мое интервью <a href="http://www.gotdotnet.ru/Channel9/568835.aspx">Russian Channel 9</a>:</p>
<div class="fig"><a href="http://www.gotdotnet.ru/Channel9/568835.aspx"><img src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2008/07/Channel9.jpg" alt="Alexey Pakhunov at Russian Channel 9" /><br />
</a></div>
<p>PS: Забавно наблюдать за собой со стороны. Столько ляпов, просто жуть! <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p><a href="http://feeds.feedburner.com/~a/not-a-kernel-guy?a=QkHBVj"><img src="http://feeds.feedburner.com/~a/not-a-kernel-guy?i=QkHBVj" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=JDdV6J"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=JDdV6J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=IKZfSJ"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=IKZfSJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/not-a-kernel-guy?a=wfUBYj"><img src="http://feeds.feedburner.com/~f/not-a-kernel-guy?i=wfUBYj" border="0"></img></a>
</div>]]></content:encoded>
			<slash:comments>0</slash:comments> 
		<wfw:commentRss>http://blog.not-a-kernel-guy.com/2008/07/09/317/feed</wfw:commentRss>
		</item>
	<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetFeedData?uri=not-a-kernel-guy</feedburner:awareness></channel>
</rss>
