./прочитай.меня

Нетривиальное программирование на языке C.

(Obfuscated C programming, english version)

[содержание]
1. Что это?

 Я взял несколько нетривиальных программ и проанализировал их: исходный код привел к читаемому виду и вкратце описал, какие особенности языка Си используются.
 Вы можете загрузить копию этих страниц одним файлом: obf.tar.gz или obf.zip.
Последовательность разархивирования:
 $ gunzip obf.tar.gz
 $ tar xf obf.tar
или
 X:> pkunzip -d obf.zip
 Изначально эта работа выполнена с целью получения допуска к зачёту по курсу лекций "Языки и системы программирования" (Часть I, осень 1997). Преподаватель - Одинцов Игорь Олегович. Тема работы - "Нетривиальные программы на языке C. Собрать и проанализировать."


[содержание]
2. Откуда взяты программы?

 Работа сделана на основе "The Thirteenth International Obfuscated C Code Contest" (13th IOCCC, 1996) (13-й международный конкурс нетривиальных C-программ).
 IOCCC имеет официальную домашнюю страничку по адресу: http://www.ioccc.org. Она содержит списки победителей разных лет, информацию о судьях, анонсы и прочее.


[содержание]
3. Как разбирались программы?

 Вначале просматривался исходный текст программы. Затем читалась аннотация к ней с рекомендациями по использованию. Потом программа компилировалась и запускалась.
 Самым сложным этапом является преобразование программы в более простую форму. В первую очередь исходный текст аккуратно пропускался через препроцессор (gcc -E ... ) (аккуратно - значит чтобы не раскрывались конструкции наподобие #include<stdio.h>). После прогонки результата через переформатер C-программ она уже принимала приличный вид. Оставалось только вручную разобрать сложные конструкции. Последним шагом было преобразование нетривиальных конструкций последовательностью более простых команд. Этот последний шаг повторялся, пока программа не становилась совсем ясной.


[содержание]
4. Какая информация о программах содержится здесь?

 prog.c - исходный текст программы. Если его необходимо компилировать с заданием макродиректив извне, то приведён 'Makefile'. prog.hint содержит краткое описание программы, её использование и намёки автора на то что она делает. converted.c - текст программы, преобразованный в простую форму. Дано также описание программы. При необходимости включаются дополнительные файлы.


[содержание]
5. Рекомендации по настройке сетеходилки.

 Желательно использовать сетеходилку, поддерживающую фреймы. Но необязательно. lynx тоже сгодится.
 Обязательно используйте шрифт с одинаковой шириной букв. Эстетическое восприятие исходных текстов многих программ очень сильно зависит от этого.
 Не помешает установить в параметрах, что табуляция равна восьми пробелам.


http://uucode.com/obf/
Oleg A. Paraschenko <olpa uucode com>