ПОТОКО-ЧУВСТВИТЕЛЬНЫЙ АНАЛИЗ УКАЗАТЕЛЕЙ ЯЗЫКА С, ОСНОВАННЫЙ НА ДИАГРАММАХ ДВОИЧНЫХ

advertisement
Санкт-Петербургский Государственный Университет
Математико-Механический факультет
Кафедра системного программирования
ПОТОКО -ЧУВСТВИТЕЛЬНЫЙ
АНАЛИЗ УКАЗАТЕЛЕЙ
ЯЗЫКА С, ОСНОВАННЫЙ НА
ДИАГРАММАХ ДВОИЧНЫХ
РЕШЕНИЙ
Дипломная работа студента 544 группы
Н. М. Тимофеева
Научный руководитель
Д.Ю. Булычев
Введение
 Классическая задача анализа потока данных
 Пример:
анализ достигающих определений без анализа
указателей
void f()
{
…
*p = 13;
…
}
Постановка задачи
 Creen – инструмент статического анализа
языка C
 Потоко-чувствительный, контекстнонезависимый анализ указателей языка С


Потоко-чувствительность – учитывает порядок и
количество исполнений операторов, влияющих на
значения указателей
Контекстная-независимость – анализ не учитывает
контекст вызова процедур
Предлагаемый подход
 Представление значений указателей
бинарными деревьями предсказателей
void f()
{
…
int* a = &b;
if (y == &b) { a = &c };
…
}
Предлагаемый подход
 Сокращенные диаграммы
двоичных решений
Компактное представление
больших множеств
 Эффективные операции над
множествами

 Интерпретация операций
на указателях в диаграммах
двоичных решений
Предлагаемый подход
 Абстракция памяти
 Удобство хранения в диаграммах двоичных
решений
 Аппроксимация значений выражений. Простейшая
арифметика на указателях
 Итеративный анализ потока данных
библиотеки PRANLIB
Пример
void main()
{
while (p == &k)
x = &y;
if (y == 0)
x = malloc(4);
else
k = &m;
p = &k;
d = x;
return 1;
}
Результаты
 Разработана абстракция памяти, удобная для
хранения в диаграммах двоичных решений
 Интерпретация действий с указателями в
диаграммах двоичных решений
 Реализован потоко-чувствительный алгоритм
анализа указателей в инструменте Creen
Download