С++ и проблемы безопасности

А.В. Михалев, А.А. Павлов, Г.Г. Аракелов


Аннотация курса: в курсе рассматриваются возможности и особенности языка C++, не входящие в стандартную университетскую программу. Подробно разбираются механизмы взаимодействия с операционной системой и механизмы работы с памятью. Уделяется внимание вопросам безопасности при разработке приложений на C++. В курсе рассматривается многопоточное программирование и особенности его использования. Будут изучены вопросы оптимизации и повышения производительности. Рассматриваются новые возможности привнесенные в С++ с появлением стандарта C++11.

Курс включает не только теоретическую часть, но и широкую практическую составляющую. Курс снабжается различными методическими материалами. Программа курса рассчитана на слушателей, обладающих базовыми знаниями языка C++.


Тематическое содержание курса

1. Краткий обзор языка C++ (Освежающая лекция.)

2. ООП. Разработка классов. Особенности наследования классов. Полиморфизм.

3. Исключения. Раскрутка стека. Неперехваченные исключения. Проблемы и уязвимости связанные с перехватом исключений

4. Работа с памятью. Организация памяти в современных ОС. Виртуальная память. Свопинг. Алгоритмы замещения страниц. Сегментация.

5. Структуры данных в памяти. Память и стандартные контейнеры. Сравнение и выбор оптимального контейнера.

6. Безопасность. Использование дефектов программного кода.

7. Различные атаки, использующие переполнение буфера.

8. Атаки, использующие возвращение управления от стандартной библиотеки.

9. Атаки, использующие внедрение программного кода.

10. Взаимодействие с операционной системой. Фундаментальные концепции ОС. Системные вызовы в Linux.

11. Оптимизация и повышение эффективности.

12. Параллельное программирование на C++. CUDA. MPI. Сравнение производительноcти.

13. Boost & STL. Линейная алгебра. Генерирование псевдослучайных чисел. Разбор текста. Использование регулярных выражений.

14. Boost & STL. Алгоритмы на графах. Многопоточность

15. Стандарт С++ 11.

16. Лямбда исчисления в C++11


Типовые контрольные задания

Курс предполагает проведения двух тестирований по теоретической части и выполнение одной лабораторной работы, которая делится на несколько частей.

В лабораторной работе, студентам будет предложено реализовать свой менеджер управления памятью.


Перечень учебной литературы
  • М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445с.
  • Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.
  • Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. - Москва: БИНОМ, 1994. 400с.
  • В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 1995. 560с.
  • Ирэ Пол. Объектно-ориентированное программирование с использованием C++: Пер. с англ. - Киев: НИИПФ ДиаСофт Лтд, 1995. 480с.
  • Т. Фейсон. Объектно-ориентированное программирование на Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544с.
  • Т. Сван. Освоение Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544с.
  • Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
  • У. Сэвитч. C++ в примерах: Пер. с англ. - Москва: ЭКОМ, 1997. 736с.
  • К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.
  • В.А. Скляров. Язык C++ и объектно-ориентированное программирование: Справочное издание. - Минск: Вышэйшая школа, 1997. 480с.
  • Х. Дейтел, П. Дейтел. Как программировать на C++: Пер. с англ. - Москва: ЗАО «Издательство БИНОМ», 1998. 1024с.