Что, приятель, знаком тебе заголовок? Да,
что только не придумывали, дабы извратиться
над бедной осью, а затем злорадно хохотать: “Глянь, глянь, она глюканула! Хо-хо-хо!”. Вот
и я решил приложить к этому свою шаловливую
ручонку, правда, случилось сие спонтанно, но
оттого не менее весело.

А началось все с того, что сидели мы
недавно на лабах по программированию, до
конца пары оставалось минуты четыре, и
делать было, хоть убей, нечего. И тут я
подумал, а какого, собственно, мы сидим и
плюем в потолок, давайте-ка устроим
следующей за нами на лабы группе небольшое
западлишко. Статья про баги на Си из
августовского Х была еще свежа в памяти, а
потому долго размышлять не пришлось.

Тут же была написана коротенькая
программа, элементарная до ужаса, однако я
все же привожу ее листинг:

void main()
{
int x[10], *p=x;
while(1)
{*p— = 87;}
}

Думаю, ясно, что она делает.
Инициализируется коротенький массивчик, и
объявляется указатель, на первый его
элемент. Затем в бесконечном, как видишь,
цикле, мы начинаем двигаться “влево”,
записывая, таким образом, не в массив, а в
совершенно левую область памяти. Как
результат запуска скомпиленного exe’шника полный подвисон всеми любимой операционки
версии 9x/ME без какого-либо писка и мольбы о
том, что приложение-де совершило
недопустимую ошибку и будет прибито. Надо
ли говорить, что ни клава, ни курсор при этом
признаков жизни не подавали, а по сему
единственный выход – теребить кнопку “пувер”.
В NT’е, естественно, такого не произойдет –
там работа с памятью организована надежно.

Ну а что делать с полученным бинарником –
дело техники. Не склонные к садизму, мы
просто кинули файлик в расшаренную на общий
доступ папку TMP, предварительно
переименовав его в нечто типа PORNTETRIS.EXE и,
намекнув уже входящей в кабинет второй
группе о том, что в ТЕМП’е мы нашли оочень
интересную программку ;-). Ну а если ты более
жесток, то перед тобой все дороги открыты. В
конце концов, можно просто прописать файло
в реестре на автозагрузку, и тогда –
здравствуй, вечный хэнгап!

К листингу могу заметить: произвольно
присваиваемое значение играет роль. Если,
скажем, установить значение в ноль, то,
помимо подвисания, мы имеем симпатичную
картинку. Почему это происходит, и как
вообще число влияет на результат – тебе
домашнее задание 8-). Попробуй, например,
выставлять значение рандомайзом, и
посмотри, как будет виснуть комп каждый раз
(и будет ли).

Само собой, мораль статьи отнюдь не в том,
что можно весело извратиться над соседом. И
не в том, что мы круто повесили ось –
программа элементарна, и суть отнюдь не в
ней. А в том, что кривой программинг может
превратить три строчки кода в монстра,
давая большое количество пищи как для
размышлений, так и для изучения.

Оставить мнение

Check Also

На что способна ада. Делаем утилиту для детекта гипервизора на полузабытом языке

Лучше всего познавать язык на реальном проекте, поэтому, когда я решил поэкспериментироват…