суббота, 14 августа 2010 г.

Core wars : Развлечения программистов

Программисты тоже люди, и иногда они устают. А что хочется поделать, когда нет желания работать? Здесь каждый может написать то, что ему нравится. Но среди этого всего точно будет — поиграть! Так что предлагаю вашему вниманию игру для настоящих программистов — Core wars.

Суть игры проста — имеется циклический участок памяти. Программы игроков разбрасываются по памяти случайным образом и начинают исполняться. Программа выполняет команды до тех пор, пока не выполнит недопустимую операцию. После чего она закроется. Побеждает тот, чья программа осталась в живых.
Программы игроки пишут на языке, похожем на ассемблер. Каждая команда программы занимает одну ячейку памяти. Именно этот факт позволяет заставить программу соперника выполнить недопустимую операцию (DAT).

Программа может выполнять несколько простых операций:
1. Копирование памяти.
2. Арифметические операции.
3. Различного рода jmp.
4. Порождать новый поток.
5. Убиваться, выполняя недопустимую операцию.
Стоит отметить, что чем больше потоков у игрока, тем медленнее они будут работать, т.к. ресурсы ЦП всем выделяются равные;).

За время существования игры (а это более 25 лет), было придумано много различных стратегий войны — от простого расстрела по площади, до настолько хитрого поведения, что кажется, что вот-вот и программа сама себя убьет, но каждый раз она умудряется уйти из под удара.
Вот пример бойца, который просто раскидывает мины по полю:
mov $3, $7
add #4, $-1
jmp $-2
dat #0, #0

Он заполняет память некорректными операциями с шагом в 4 ячейки. Соответственно если при борьбе с себеподобным он перезапишет одну из 3-х первых инструкций соперника, то последний будет повержен.
Насколько я понял, у этого языка программирования имеется несколько версий. Так что вполне вероятно, что эта программа сразу не запустится.

Я думаю вы уже догадались, что здесь не только можно писать вирусы, но и нужно! И никто вам ничего плохого за это не сделает)
Здесь есть неплохой guide для начинающих.

Комментариев нет: