bash.im ithappens.me zadolba.li
2165

Зверские байты

7 февраля 2010, 11:00

Суббота, середина дня. Сижу дома, делаю лабораторную. Задание несложное: программа должна из командной строки получить имя файла и удалить его. Есть лишь небольшая загвоздка: весь код должен быть на ассемблере. Ладно, наваял 66 строк кода, добавив кроме того сообщения об ошибках вроде «файл не найден» и «файл невозможно удалить». Запускаю — всё работает, ещё раз — уже не хочет. Программа упорно мне доказывает, что «файл невозможно удалить».

Пробую разные варианты. Передаю аргументом командной строки существующий файл, вбиваю случайную последовательность чисел — опять двадцать пять, «невозможно удалить», и всё тут.

Ладно, не первый день за рулём. Запускаю отладчик и медленно, смакуя каждую команду, прогоняю код перед глазами. Вуаля, всё работает, если файл есть — удаляется, если нет — появляется сообщение об этом. Если же просто запускать программу, старая история повторяется. Ба, да исполняемый файл весит ровно 666 байт — нехорошее число преследует меня!

Мучился я довольно долго. Программа исправно работает под отладчиком, а так — ни в какую. В конце концов посетила меня одна смутная догадка, я быстро добавил пару строк в код, и всё заработало. Уж не знаю, то ли моя догадка оказалась верна, то ли изменившийся на несколько байтов размер программы освободил её от проклятия.

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