-
Notifications
You must be signed in to change notification settings - Fork 4
Предоставленные файлы
На странице проекта «Corewar» приведены ссылки для скачивания следующих файлов:
В этом архиве можно найти скомпилированный исполняемый файл виртуальной машины corewar
, скомпилированную программу-транслятор asm
, а также множество чемпионов в виде .s
и .cor
файлов.
В задании проекта сказано, что программа asm
переводит код из языка ассемблера, записанного в .s
файле, в байт-код, который должен быть помещен в файл с расширением .cor
.
Но на самом деле предоставленная программа не обращает никакого внимания на расширения входящих файлов. Она лишь ищет последнюю точку в имени и заменяет всё дальнейшее его содержимое расширением .cor
.
Вопрос «Насколько можно назвать такой подход оптимальным?» остается открытым.
Ведь это делает возможными следующие ситуации, которые хоть и не являются ошибками в привычном понимании, но все же нарушают заявленный workflow:
$ ./asm batman.cor
Writing output program to batman.cor
$ ./asm batman
Writing output program to .cor
$ ./asm dc.heroes/batman
Writing output program to dc.cor
Также предоставленная программа никак не ограничивает количество принимаемых на обработку чемпионов.
Поэтому за один раз в качестве аргументов можно указать множество файлов с самыми разными расширениями. Правда, обработан будет только последний из них:
$ ./asm ant-man.s iron_man.s batman.s
Writing output program to batman.cor
Все остальные аргументы asm
игнорирует:
$ ./asm --undefined-flag incorrect_file.s batman.s
Writing output program to batman.cor
Поскольку в тексте задания подобное поведение не описано, в собственной реализации можно ограничить количество принимаемых аргументов всего одним файлом, который гарантировано должен иметь расширение .s
.
Это сделает работу asm
более прозрачной и ликвидирует приведенные выше уязвимости в workflow.
Кстати, виртуальная машина также не проверяет входящие файлы на наличие расширения
.cor
.И хотя для программы
corewar
такое поведение не является источником уязвимостей, в своей реализации данную проверку всё же стоит добавить для соблюдения единого стиля поведения всех компонентов системы.
Также имеются проблемы с предоставленными примерами чемпионов.
К сожалению, не все файлы были написаны корректно. Поэтому часть из них программа asm
не сможет транслировать в байт-код и выдаст ошибку.
В такой ситуации стоит учитывать, что с файлами из папки champs/examples
проблем не возникнет, а вот в работоспособности остальных предстоит убедиться лично.
В файле op.c
находиться структура, которая описывает каждую операцию, определенную в языке ассемблера.
Приведенные в этой структуре данные мы можем перезаписать в любой удобной для нас форме и поместить в проект. Никаких ограничений в данном случае не установлено.
Также нам предоставляется заголовочный файл op.h
. В нем содержатся важные константы препроцессора, которые определяют параметры работы виртуальной машины, а также синтаксис ассемблера.
С этим файлом стоит обращаться более бережно и включить в проект таким, какой он есть. Внеся лишь самые необходимые изменения.
Поскольку для участия в проекте «Corewar Championship» его наличие является одним из условий:
It will be executed on our own virtual machine, so the configuration will be the one you will describe in your file
op.h
that will be attached.
Необходимыми изменениями, которые обязательно нужно выполнить над данным файлом, является его приведение в соответствие с Norm'ой. Поскольку предоставленный файл не соответствует установленным правилам форматирования и Norminette при его проверке выдаст ряд предупреждений о найденных ошибках.
Если же участие в соревновании «Corewar Championship» не запланировано, то о судьбе файла op.h
беспокоиться не стоит. В данном случае с ним можно проводить любые, даже гораздо более серьезные изменения, чем простое приведение к Norm'е.