Системное программирование


Об отделе

Отдел специализируется на решении широкого спектра задач в области анализа программ – в частности, на исследовании методов и разработке инструментов автоматического анализа. Помимо научно-образовательной деятельности сотрудники отдела занимаются работой над контрактными проектами.

Основные направления деятельности

Статический анализ исходного кода программ:

  • Исследование методов статического анализа программ по исходному коду с целью обнаружения дефектов и уязвимостей в программах.
  • Исследование методов автоматического преобразования программ.
  • Разработка специализированных языков описания ошибок и уязвимостей в программах.
  • Разработка инструментов статического анализа исходного кода программ.

Динамический анализ программ:

  • Исследование методов динамического анализа программ.
  • Разработка инструментов динамического анализа программ с целью обнаружения критических дефектов и уязвимостей.
  • Разработка инструментов профилирования использования памяти и производительности программ.

Темы исследовательских проектов для студентов

В рамках исследовательских работ студенты могут изучить:

  • методы построения и реализации современных инструментов динамического символьного исполнения программ;
  • современные технологии создания кросс-платформенных приложений (Windows, Linux);
  • современные языки программирования на языках C, C++, Python, JavaScript и их применение при создании программ;
  • современные методы разработки архитектуры приложения;
  • гибкие методологии разработки программ и их применение на практике. 
Список исследовательских тем:

  1. Сбор трассы для многопоточных приложений. Распространение пометок по потоку инструкций и  данных программы для многопоточных приложений. В рамках данной работы можно изучить методы анализа многопоточных приложений, узнать, что такое анализ потока помеченных данных программы, и применить данные техники для обнаружения ошибок времени исполнения в многопоточных программах.
  2. Построение срезов по переменным для ограничения помеченности потока данных. В рамках данной работы можно познакомиться с анализом потока помеченных данных, а также с применением техники построения срезов программы для решения задачи избежания избыточной помеченности потока данных программы с целью эффективного обнаружения ошибок времени исполнения программы.
  3. Обнаружение ошибок утечки ресурса (памяти, дескриптора файла и др.). В рамках данной работы на основе современного инструмента динамического символьного исполнения можно построить анализатор программы, обнаруживающий ошибки утечки различных ресурсов операционной системы.
  4. Обнаружение ошибок двойного освобождения памяти (double free) и использования неинициализированного указателя (dangling pointer, use after free). В рамках данной работы на основе современного инструмента динамического символьного исполнения можно построить анализатор программы, обнаруживающий ошибки двойного освобождения памяти на куче, использования неинициализированного указателя и использования памяти после освобождения.
  5. Анализ уникальности найденных критических ошибок. В рамках данной работы можно познакомиться с методами динамического символьного исполнения программ для обнаружения уникальных трасс реализации ошибок в программе с целью обобщения набора внешних данных программы, приводящих к сбою в работе программы.
  6. Обнаружение циклов и формирование инвариантов циклов в процессе символьного анализа программ. В рамках данной работы студентам предстоит разработать алгоритмы обнаружения циклов и параметров циклов для обобщения цикла в виде символьной формулы, описывающей его исполнение в программе с целью обнаружения ошибок нарушения границ выделенных буферов при обращении к памяти.
  7. Кэширование состояний/инструкций в процессе динамического символьного исполнения программ для повышения производительности анализа. В рамках данной работы можно познакомиться с ограничениями метода динамического символьного исполнения программ и способами преодоления данных ограничений для реализации алгоритмов увеличения производительности динамического символьного исполнения программ.
  8. Реализация модуля построения трассы для найденной ошибки в терминах бинарного и исходного кода. В рамках данной работы можно познакомиться с устройством отладочной информации программы с целью представления результатов обнаруженной ошибки в исполняемом коде в виде стека вызовов и в терминах исходного кода программы. Кроме того, можно научиться работать с отладочной информацией в формате DWARF и PDB.
  9. Пользовательский интерфейс для запуска, отслеживания и представления результатов динамического анализа программ в виде Web-сервера. В рамках данной работы студенты смогут разработать Web-интерфейс для инструментов динамического анализа программ, который позволяет настраивать, запускать, отслеживать состояние анализа программы и предоставлять результаты анализа в удобной для аналитика форме.
  10. Применение полносистемных эмуляторов для реализации динамического символьного исполнения программ. В рамках данной работы можно познакомиться с современными методами эмуляции современных вычислительных систем QEMU и применения эмулятора для целей динамического анализа программ.