<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: За последние две-три недели узнал много нового&#8230;</title>
	<atom:link href="http://blog.not-a-kernel-guy.com/2008/03/27/300/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.not-a-kernel-guy.com/2008/03/27/300</link>
	<description>... in the Windows kernel team</description>
	<pubDate>Thu, 04 Dec 2008 06:49:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11439</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Sat, 05 Apr 2008 01:32:02 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11439</guid>
		<description>&lt;blockquote&gt;Т.е. у приложений отобрали их законное право вытворять со своим стеком что хотят? Как-то не верится.&lt;/blockquote&gt;

Не совсем так. Приложение может вытворять со своим стеком все, что ему вздумается. Но в результате:

1. Отладчик не покажет корректный корректный стек. Это верно и для x86, но в отличие от x64 там позволяются куда большие вольности;

2. Не будет корректно работать stack unwinding при обработке исключения. Плохо в этом случае будет исключительно самому приложению.

Ну и понятное дело, что при вызовах системных API параметры должны идти в правильном порядке. :-)

&lt;blockquote&gt;Ну то есть сохранение всё таки есть, просто в другом куске ядра.&lt;/blockquote&gt;

Есть конечно. Только работает оно совсем не так, как я себе представлял.</description>
		<content:encoded><![CDATA[<blockquote><p>Т.е. у приложений отобрали их законное право вытворять со своим стеком что хотят? Как-то не верится.</p></blockquote>
<p>Не совсем так. Приложение может вытворять со своим стеком все, что ему вздумается. Но в результате:</p>
<p>1. Отладчик не покажет корректный корректный стек. Это верно и для x86, но в отличие от x64 там позволяются куда большие вольности;</p>
<p>2. Не будет корректно работать stack unwinding при обработке исключения. Плохо в этом случае будет исключительно самому приложению.</p>
<p>Ну и понятное дело, что при вызовах системных API параметры должны идти в правильном порядке. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>Ну то есть сохранение всё таки есть, просто в другом куске ядра.</p></blockquote>
<p>Есть конечно. Только работает оно совсем не так, как я себе представлял.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Moveton</title>
		<link>http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11438</link>
		<dc:creator>Moveton</dc:creator>
		<pubDate>Fri, 04 Apr 2008 22:03:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11438</guid>
		<description>&lt;blockquote&gt;Тогда это приложение работать не будет. �то все равно, как если бы прилоение решило параметры функций в другом порядке указывать.&lt;/blockquote&gt;
Т.е. у приложений отобрали их законное право вытворять со своим стеком что хотят? Как-то не верится. Всякие cconv всё таки придуманы не только под процессор, но и под языки.

&lt;blockquote&gt;При переходе в kernel mode на стеке будет создан trap frame, куда ebx и сохранится&lt;/blockquote&gt;
Ну то есть сохранение всё таки есть, просто в другом куске ядра.</description>
		<content:encoded><![CDATA[<blockquote><p>Тогда это приложение работать не будет. �то все равно, как если бы прилоение решило параметры функций в другом порядке указывать.</p></blockquote>
<p>Т.е. у приложений отобрали их законное право вытворять со своим стеком что хотят? Как-то не верится. Всякие cconv всё таки придуманы не только под процессор, но и под языки.</p>
<blockquote><p>При переходе в kernel mode на стеке будет создан trap frame, куда ebx и сохранится</p></blockquote>
<p>Ну то есть сохранение всё таки есть, просто в другом куске ядра.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11436</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Thu, 03 Apr 2008 20:19:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11436</guid>
		<description>&lt;blockquote&gt;А если приложение на соглашения положит?&lt;/blockquote&gt;

Тогда это приложение работать не будет. Это все равно, как если бы прилоение решило параметры функций в другом порядке указывать. 

&lt;blockquote&gt;Вот внутри произвольной функции стоит: mov ebx, 3. И тут пришла пора переключить поток. Кто этот ebx сохранит?&lt;/blockquote&gt;

При переходе в kernel mode на стеке будет создан trap frame, куда ebx и сохранится. На amd64 возможны варианты. Вообще-то поскольку rbx - non volatile, он сохраняется в exception frame, но если ситуации когда он сохраняется и в trap frame.

Получается, что к моменту непосредственного переключения большинство регистров уже сидит в стеке.</description>
		<content:encoded><![CDATA[<blockquote><p>А если приложение на соглашения положит?</p></blockquote>
<p>Тогда это приложение работать не будет. Это все равно, как если бы прилоение решило параметры функций в другом порядке указывать. </p>
<blockquote><p>Вот внутри произвольной функции стоит: mov ebx, 3. И тут пришла пора переключить поток. Кто этот ebx сохранит?</p></blockquote>
<p>При переходе в kernel mode на стеке будет создан trap frame, куда ebx и сохранится. На amd64 возможны варианты. Вообще-то поскольку rbx - non volatile, он сохраняется в exception frame, но если ситуации когда он сохраняется и в trap frame.</p>
<p>Получается, что к моменту непосредственного переключения большинство регистров уже сидит в стеке.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Moveton</title>
		<link>http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11434</link>
		<dc:creator>Moveton</dc:creator>
		<pubDate>Thu, 03 Apr 2008 16:41:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11434</guid>
		<description>Что-то насчёт сохранения контекста непонятно:
1) А если приложение на соглашения положит? Это же всего лишь MSVC так работает, а вообще велосипед в каждом компиляторе свой. Это же не IA64 на котором действительно с регистрами и вызовами функций всё очень интересно.
2) Вот внутри произвольной функции стоит: mov ebx, 3. И тут пришла пора переключить поток. Кто этот ebx сохранит?</description>
		<content:encoded><![CDATA[<p>Что-то насчёт сохранения контекста непонятно:<br />
1) А если приложение на соглашения положит? Это же всего лишь MSVC так работает, а вообще велосипед в каждом компиляторе свой. Это же не IA64 на котором действительно с регистрами и вызовами функций всё очень интересно.<br />
2) Вот внутри произвольной функции стоит: mov ebx, 3. И тут пришла пора переключить поток. Кто этот ebx сохранит?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy : За последние две-три недели узнал много нового...</title>
		<link>http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11418</link>
		<dc:creator>Not a kernel guy : За последние две-три недели узнал много нового...</dc:creator>
		<pubDate>Fri, 28 Mar 2008 04:46:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/03/27/300#comment-11418</guid>
		<description>[...] from blog.not-a-kernel-guy.com.  Published Friday, March 28, 2008 5:46 AM by alexeypa Filed under: Отладка, Windows, [...]</description>
		<content:encoded><![CDATA[<p>[...] from blog.not-a-kernel-guy.com.  Published Friday, March 28, 2008 5:46 AM by alexeypa Filed under: Отладка, Windows, [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
