Основы программирования

2016-171 группа

Яков Александрович Кириленко

Студент TODO №1 №2 №3 №4
67 Первый тест Сортировка текстового файла 1 -- простая версия Сортировка текстового файла 2 -- отладка работы с указателями Сортировка текстового файла 3 -- профилирование Сортировка текстового файла 4 -- mmap Стековый калькулятор Расход памяти Быстродействие -- анализ Buffer overrun exploit
Аврамов Кирилл 3
Байбара Евгений 3
Галямина Василиса 3
Горбатюк Сергей 1
Гроздов Николай 3
Ковалев Марк Германович 3
Кутуев Владимир 2
Мальцев Владимир 1
Мельников Никита 3
Мишин Никита 1
Мунира Турсунова 3
Мустафа Ирина 3
Немчинов Егор 2
Нижарадзе Анастасия Тимуровна 3
Оганесян Гамлет 9
Остроухов Антон 2
Скаредов Сергей 1
Соколов Ярослав 2
Турк Степан 8
Тюрин Алексей 2
Черепанов Алексей 3
Чубуков Филипп 3
Чэнь Юйчжи 3

Задачи

Домашняя работа 4. 12.12.16
  1. Buffer overrun exploit

    (* для тех, кто может себе позволить...)
    Реализовать атаку buffer overflow, написав заведомо небезопасную функцию чтения.
    В коде следующие функции:
    - main,
    - input,
    - other.
    main вызывает input, специально подобранный ввод приводит к вызову other (перезаписан адрес возврата). Other печатает что-нибудь, дабы продемонстрировать, что была вызвана. Корректное продолжение работы не требуется.
    main или input печатают любую необходимую информацию: адреса функций, содержимое стека.
    Совет: считывайте очередной int в массив, используя while(!stop) { <...>; data[i++] = x;}. Это проще, чем scanf("%s", ...).
    Отчетность - код + скриншот.

Домашняя работа 3. 12.12.16
  1. Стековый калькулятор
    1. Длинная арифметика. Числа можно реализовывать списком или в динамическом массиве.
    2. Стековый калькулятор, читает команды из входного потока и выводит результат в stdout
    3. Операции -- каждая с новой строки на входе. Вид: <десятичное число> -- положить в стек; +,-,*,/ -- соответствующие целочисленные операции над двумя верхними значениями в стеке. Значения снимаются со стека, результат заносится в стек. "=" -- распечатать на экран вершину стека, не снимать значение.
    4. Если в стеке пусто (недостаточно значений для бинарной операции) , запрошенная операция должна быть проигнорирована, а в стандартный поток вывода ошибок надо вывести строку, заканчивающуюся на "empty stack.".
  2. Расход памяти

    На тестах буду числа с 100 000 000 и более десятичных цифр.

  3. Быстродействие -- анализ

    (* со звёздочкой, для старательных) Добавить в README.md табличку с результатами тестирования, включая замеры производительности. Описать метод замера скорости работы, сделанные выводы и внедрённые оптимизации .

Домашняя работа 2. 21.11.16
  1. Сортировка текстового файла 1 -- простая версия

    Реализовать утилиту сортировки текстового файла (на С). Программа читает из файла строки и выводит на экран в отсортированном порядке. Количество строк в файле указывается первым параметром командной строки. Второй параметр -- имя файла, из которого читать. Используйте main(int argc, char ** argv) и atoi().

  2. Сортировка текстового файла 2 -- отладка работы с указателями

    Отладить программу из п.1 с помощью Address Sanitizer и Valgrind/Memcheck. Решить все проблемы работы с указателями.

  3. Сортировка текстового файла 3 -- профилирование

    Сформировать тестовый набор (взять готовый большой файл). Замерить быстродействие, найти критические места. GProf и/или Valgrind/Callgrind. Задокументировать результат (табличкой в README.md). Предложить и реализовать улучшения для оптимизации времени работы на своём большом тесте.

  4. Сортировка текстового файла 4 -- mmap

    Усложнённая задача. Необязательная.
    Реализовать, используя mmap, не меняя исходное представление текста, избегая копирования строк. Задокументировать результаты тестирования.

Домашняя работа 1. 14.11.16
  1. Первый тест

    Допускается "родной" язык программирования, если он отличается от С, но лучше на С.
    Разделения задания на задачи не будет.

© 2014-2018 HwProj