<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM</id>
	<title>Программирование и отладка на C и ASM - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM"/>
	<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;action=history"/>
	<updated>2026-10-12T23:45:37Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=343&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=343&amp;oldid=prev"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 21:39, 27 февраля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=342&amp;oldid=prev</id>
		<title>lor&gt;Mandala: Откат правок 31.173.242.209 (обсуждение) к версии Cetjs2</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=342&amp;oldid=prev"/>
		<updated>2018-05-09T15:06:11Z</updated>

		<summary type="html">&lt;p&gt;Откат правок &lt;a href=&quot;/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/31.173.242.209&quot; title=&quot;Служебная:Вклад/31.173.242.209&quot;&gt;31.173.242.209&lt;/a&gt; (&lt;a href=&quot;/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:31.173.242.209&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Обсуждение участника:31.173.242.209 (страница не существует)&quot;&gt;обсуждение&lt;/a&gt;) к версии &lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Cetjs2&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Cetjs2 (страница не существует)&quot;&gt;Cetjs2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Книга будет посвящена программированию на языке Си и ассемблера, притом они будут рассказываться параллельно, т. е. на примере кода на ассемблере будет объясняться Си, и на примере кода на Си будет объясняться ассемблер. Кроме того, будет затронута тема отладки через GDB, использование strace, ltrace, valgrind. Будет рассказано про системные вызовы и прочее…&lt;br /&gt;
&lt;br /&gt;
Неструктурированный поток информации, которую надо разложить на разделы, главы:&lt;br /&gt;
Сначала будет традиционный «hello world» и его детальный разбор. Будет написано несколько хеллоувордов, один будет состоять из одного &amp;lt;tt&amp;gt;puts()&amp;lt;/tt&amp;gt;, другой — из вызовов двух &amp;lt;tt&amp;gt;puts()&amp;lt;/tt&amp;gt;, третий — из &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt; и четвертый — из двух &amp;lt;tt&amp;gt;write()&amp;lt;/tt&amp;gt;. Будет сказано про то, что из себя представляет строка (нуль‐терминированная Си строка — предполагается использование символов только из набора ASCII). Будет про то, как скомпилировать чтобы получить объектные файлы, и потом слинковать (через ld). Но и про случай с линковкой через gcc сразу (хотя GCC будет там в любом случае под капотом вызывать ld, об этом надо непременно сообщить). Про то, как получить ассемблерный листинг от компилятора (опция &amp;lt;tt&amp;gt;-S&amp;lt;/tt&amp;gt;) и это будет применено к всем видам хеллоувордов, с последующим объяснением, что конкретно значат эти ассемблерные листинги. Про дизассемблирование через objdump тоже будет непременно сказано. Будет приведен пример «хеллоуворда с ошибкой», т. е. например если сделать не нуль‐терминированную строку (просто массив, который нулем не заканчивается), попробовать ее вывести через тот самый &amp;lt;tt&amp;gt;puts&amp;lt;/tt&amp;gt; и пробовать запустить это. Это же применительно к &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt; с размером, превышающим фактический размер строки. Запуск вариантов с ошибками и без ошибок под под &amp;lt;tt&amp;gt;valgrind&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;strace&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt;. Про отличия &amp;lt;tt&amp;gt;puts&amp;lt;/tt&amp;gt; от &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt;, рассказ про системные вызовы, файловые дескрипторы. Рассказ о том, как через &amp;lt;tt&amp;gt;open&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;fopen&amp;lt;/tt&amp;gt; создать файл и вывести в него текст через &amp;lt;tt&amp;gt;write&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;fputs&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Дальше: пользовательский ввод через &amp;lt;tt&amp;gt;gets&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;read&amp;lt;/tt&amp;gt; из stdout. Например, программа пишет «введите свое имя» — ожидает ввода имени — отвечает &amp;lt;tt&amp;gt;привет, %имя%.&amp;lt;/tt&amp;gt;. Чтение из файлов через &amp;lt;tt&amp;gt;read fgets&amp;lt;/tt&amp;gt; (надо открыть через &amp;lt;tt&amp;gt;open fopen&amp;lt;/tt&amp;gt;, прежде чем читать, и чтобы было разрешение на чтение — это понятно). Примеры ошибок, позапускать через &amp;lt;tt&amp;gt;valgrind&amp;lt;/tt&amp;gt;. (пока что на таких примерах показать полезность отладчика — задача нелегкая. Надо будет подумать насчет того, чтобы сделать некий специально ошибочный код, и попросить в нем выловить баги через отладку). Позапускать через &amp;lt;tt&amp;gt;strace ltrace&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Дальше: арифметические операции, обычные &amp;lt;tt&amp;gt;goto&amp;lt;/tt&amp;gt; и метки, конструкция &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;. Простейший цикл из &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;, который делает нечто n‐ное количество раз, например выводит «hello world». Разбор ассемблерного выхлопа. Разбор конструкции &amp;lt;tt&amp;gt;if (условие) {действие;}&amp;lt;/tt&amp;gt; и ассемблерного выхлопа. Аналогично для конструкции &amp;lt;tt&amp;gt;if (условие) {действие;} else {действие;}&amp;lt;/tt&amp;gt;. Рассказ о том, что такое &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; (скоуп, область видмиости, блок кода). Понятие «стека» в ассемблере для выделения памяти под локальные переменные. Небольшой такой рассказ про глобальные переменные, чем отличается объявление глобальной и локальной переменной с т. з. ассемблера. Рассказ про циклы и их эквивалентность (заменяемость) конструкцией &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;. Теперь уже можно «побродить» по коду через отладчик, посмотреть как «исполняемое» место через эти if—goto и циклы перепрыгивает.&lt;br /&gt;
&lt;br /&gt;
Можно пообъяснять ассемблер поподробнее, и попросить что‐то писать непосредственно на ассемблере, а не только читать код, выдаваемый компилятором&lt;br /&gt;
&lt;br /&gt;
Дальше — больше. Текст плана работ находится в процессе доработки.&lt;br /&gt;
&lt;br /&gt;
Начало положено: [[Программирование и отладка на C и ASM — Первые программы. Знакомство с C и ассемблером. Компиляция, линковка, код возврата. Вывод текста.]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование и отладка на C/ASM]]&lt;/div&gt;</summary>
		<author><name>lor&gt;Mandala</name></author>
	</entry>
</feed>