SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Обнаружение дефектов работы с
указателями в программах на языках
C/C++ с использованием статического
анализа и логического вывода
Татьяна Верт, Татьяна Крикун (Санкт-Петербургский
государственный политехнический университет)
Михаил Глухих (Технический университет Клаусталя)



Программное обеспечение содержит ошибки
Функциональные ошибки
o Программа не соответствует спецификации



Нефункциональные ошибки (программные
дефекты)
o Использование неинициализированных
переменных
o Некорректное использование указателей
o Выходы за границы массивов

2



Полнота – доля истинных обнаруженных дефектов
среди всех дефектов, имеющихся в программе
Точность – доля истинных обнаруженных дефектов
среди всех обнаруженных дефектов
Два из Трех

Высокая
полнота

Низкая
ресурсоемкость

Высокая
точность

3
4





Анализ всех путей
программы
Раздельный анализ путей
(высокая точность и
высокая ресурсоёмкость)
Совместный анализ путей
(приемлемая
ресурсоёмкость и низкая
точность)

5






Зависимость – произвольная связь между
значениями двух и более переменных
программы
Математически, зависимость может быть
представлена в виде предиката
Анализ
зависимостей
позволяет
компенсировать погрешность, вызванную
слиянием путей в ходе статического анализа

6


Использование средств логического вывода
для доказательства различных утверждений
в ходе статического анализа, в частности,
утверждений о наличии либо отсутствии
дефектов
в
отдельных
операторах
программы

7
8
 Хранение состояния анализируемой программы в
виде множества предикатов логики первого порядка
Предикаты

Точные значения
(i=const, p=&obj+shift)

Предикаты общего вида
(type(obj1, obj2, ...) is
true)

Анализ точных
значений

Анализ
зависимостей
9
10





Извлечение предикатов при интерпретации
операторов
Типы предикатов:
– арифметические (A=B+C, A=B*C, A=B%C, и т. д.)
– логические (A=¬B, A=B∨D, A=B∧D, A→B)
– сравнения (A>B, A<B, A≥B, A≤B, A≠B)
– работа с указателями(A=&B+C, A=*B)
– обращение к составному объекту(A=B[C], A=B.C)
– размер объекта(A = sizeof B, A ≤ sizeof B)
–…
Представление: 𝑝(𝑣1 , 𝑣2 , … , 𝑣 𝑛 ), где 𝑝 функциональный символ, 𝑣 𝑖 , 𝑖 = 1 … 𝑛 – предикатные
переменные
11



Переменными предикатов являются другие
предикаты
Примеры:
– 𝑜𝑛𝑒𝑜𝑓 𝑝1 , 𝑝2 – истинен хотя бы один из двух
предикатов 𝑝1 , 𝑝2
– 𝑜𝑝𝑝𝑜𝑠(𝑝) – предикат 𝑝 ложен
– 𝑒𝑞𝑢𝑖𝑣 𝑝1 , 𝑝2 – предикаты 𝑝1 и 𝑝2 одновременно
истинны или одновременно ложны

 Сложные предикаты также могут быть описаны в
терминах логики первого порядка

12


Представление переменных на основе статического
однократного присваивания (SSA):
– Каждой переменной значение присваивается
только один раз;
– В случае присвоения нескольких значений
используется версионирование переменных.
x = a + b;
x.1 = a.1 + b.1;
y = x * x;
y.1 = x.1 * x.1;
x = c + d;
x.2 = c.1 + d.1;
𝑠𝑢𝑚 𝑥1 , 𝑎1 , 𝑏1
mult 𝑦1 , 𝑥1 , 𝑥1
s𝑢𝑚 𝑥2 , 𝑐1 , 𝑑1

13


Выявление зависимостей при интерпретации:
– операторов определения переменной
– операторов прямого присваивания lvar=…
•
•
•
•
•

Присваивания lvar=rvar
Присваивания lvar=binary(arg1, arg2)
Присваивания lvar=unary(rvar)
Присваивания адреса lvar=&rvar
Присваивания
через
косвенную
lvar=*rvar

адресацию

– операторов косвенного присваивания *lvar=rvalue
– операторов ветвления if (cond)
– операторов выделения/освобождения памяти
14





Объединение состояний программы в точках слияния
путей
Любое условие сохраняется на выходе фи-функции
только в том случае, если оно имелось на всех её
входах
Если
некоторой
переменной
программы
𝑣 соответствуют разные предикатные переменные
𝑣1 и 𝑣2 во входных состояниях, то для неё создается
новая предикатная переменная 𝑣3 , при этом в
выходное
состояние
добавляется
предикат
𝑜𝑛𝑒𝑜𝑓(𝑒𝑞𝑢𝑎𝑙𝑠(𝑣3 , 𝑣1 ), 𝑒𝑞𝑢𝑎𝑙𝑠(𝑣3 , 𝑣2 ))

15


Если объект имеет разные версии в разных ветвях
условного оператора, предикат, описывающий его
значение, следует привязать к условию оператора if



Пример:

if (size > 0)
q = malloc(size);
else
q = 0;

Предикатное состояние
Истинная ветвь

Ложная ветвь

𝑔𝑟𝑒𝑎𝑡𝑒𝑟 𝑠𝑖𝑧𝑒1 , 0

𝑙𝑒𝑠𝑠_𝑒𝑞𝑢𝑎𝑙𝑠 𝑠𝑖𝑧𝑒1 , 0

𝑠𝑖𝑧𝑒𝑜𝑓 𝑑𝑦𝑛, 𝑠𝑖𝑧𝑒1

𝑒𝑞𝑢𝑎𝑙𝑠 𝑞2 , 0

𝑝𝑡𝑟 𝑑𝑦𝑛, 𝑞1 , 0
Выходное состояние
𝑜𝑛𝑒𝑜𝑓(𝑒𝑞𝑢𝑎𝑙𝑠(𝑞3 , 𝑞1 ), 𝑒𝑞𝑢𝑎𝑙𝑠(𝑞3 , 𝑞2 ))
𝑒𝑞𝑢𝑖𝑣(𝑙𝑒𝑠𝑠_𝑒𝑞𝑢𝑎𝑙𝑠 𝑠𝑖𝑧𝑒1 , 0 , 𝑒𝑞𝑢𝑎𝑙𝑠 𝑞3 , 0 )

16


Обнаружение дефектов при анализе операции
разадресации *ptr и операции обращения по индексу
ptr[i]
• Некорректное использование указателей:
int* ptr = 0;
if (array[0]>0)
ptr=array;
int val=*ptr; //разадресация нулевого указателя

• Выход за границу объекта
int
int
i =
a =

a, i;
array[9];
10;
array[i]; //выход за границу массива

17


Корректность указателя
p = (void*)(&t)+s; v = sizeof(t);

𝑝𝑡𝑟 𝑡, 𝑝, 𝑠 , 𝑠𝑖𝑧𝑒𝑜𝑓 𝑡, 𝑣 , 𝑔𝑟𝑒𝑎𝑡𝑒𝑟_𝑒𝑞𝑢𝑎𝑙𝑠(𝑠, 0), 𝑙𝑒𝑠𝑠(𝑠, 𝑣)
𝑐𝑜𝑟𝑟𝑒𝑐𝑡_𝑝𝑡𝑟(𝑝)
 Разадресация указателя v = *p;
1) Указатель на простую переменную
p = (void*)(&t);

𝑝𝑡𝑟 𝑡,𝑝,0 ,𝑑𝑒𝑟𝑒𝑓(𝑝,𝑣)
𝑒𝑞𝑢𝑎𝑙𝑠(𝑡,𝑣)

2) Указатель на элемент составного объекта
p = (void*)(&a)+s; t = *(&a +s);

𝑝𝑡𝑟 𝑎, 𝑝, 𝑠 , 𝑎𝑟𝑟 𝑎, 𝑡, 𝑠 , 𝑑𝑒𝑟𝑒𝑓(𝑝, 𝑣)
𝑒𝑞𝑢𝑎𝑙𝑠(𝑡, 𝑣)
18


Сложение указателя с целочисленной
константой
p = (void*)(&a)+s; t=s+b; q = p+b;

𝑝𝑡𝑟 𝑎, 𝑝, 𝑠 , 𝑠𝑢𝑚 𝑡, 𝑠, 𝑏 , 𝑠𝑢𝑚(𝑞, 𝑝, 𝑏)
𝑝𝑡𝑟(𝑎, 𝑞, 𝑡)

19




Присутствие дефекта – доказательство
разрешимости предикатов:
– нулевой указатель:𝑒𝑞𝑢𝑎𝑙𝑠(𝑝𝑡𝑟, 0)
– некорректный
указатель: 𝑜𝑝𝑝𝑜𝑠(𝑐𝑜𝑟𝑟𝑒𝑐𝑡_𝑝𝑡𝑟(𝑝𝑡𝑟))
Отсутствие дефекта – неразрешимость
предикатов

20
…
int x,b;
std::cin >> x;
int arr[5]={0,1,2,3,4};
if (x>0){
b = arr[x];
}
…

Предикаты
sizeof(arr, 20),
equals(arr[0]_0, 0),
equals(arr[1]_0, 1),
equals(arr[2]_0, 2),
equals(arr[3]_0, 3),
equals(arr[4]_0, 4),
greater(x_0, 0),
ptr(arr, tmp1_0, 0)),
mult(tmp2_0, x_0, 4),
sum(tmp3_0, tmp1_0,tmp2_0)

ptr(arr, tmp3, tmp2), sizeof(arr, 20), or(less(tmp2, 0),
greater_equals(tmp2, 20)) = > oppos(correct_ptr(tmp3))

21


Доказатели теорем
– HOL Theorem Prover



Языки логического программирования
– Bprolog



SMT-решатели
– Z3

22


Средство-прототип

23
Пример Истинных
дефектов

1
2
3
4
5
6
7
8

1
2
1
2
0
2
0
2

Полнота
Точность
Среднее время

Разработанная
Aegis
система
(Digitek Labs)
дефектов ложных дефектов ложных
найдено дефектов найдено дефектов
найдено
найдено
1
0
1
0
2
0
0
0
1
0
1
0
2
0
3
1
0
0
1
1
2
0
3
1
0
0
2
2
1
0
1
0
…
95%
75%
95%
68%
53 сек.
5 сек.

FlexeLint
(Gimpel Software)
дефектов ложных
найдено дефектов
найдено
1
0
0
0
0
0
3
1
1
1
1
1
1
1
1
0
45%
60%
4 сек.

24






Применение алгоритмов сборки мусора
Применение
алгоритмов
упрощения
состояния программы
Разработка
механизма
выделения
инвариантов цикла
Обнаружение более широкого класса
программных дефектов

25








Рассмотрен подход к статическому анализу с
использованием средств логического вывода.
Приведены правила извлечения предикатов из
различных операторов анализируемой программы.
Разработаны логические правила вывода для анализа
указателей и обнаружения дефектов работы с
указателями.
Приведённые алгоритмы анализа реализованы в
исследовательском прототипе на базе анализатора
Aegis и SMT-решателя Microsoft Z3.
Показано значительное повышение точности по
сравнению с базовым анализатором.
26
27






Предикат – логическое утверждение, которое
может быть как истинно, так и ложно, зависящее от
ряда предикатных объектов.
Зависимость – связь между значениями двух и
более программных объектов.
Фи-функция – точка слияния двух и более потоков
выполнения программы.
Абстрактная интерпретация – общая теория,
которая задает способ аппроксимации семантики
динамических дискретных систем, в том числе компьютерных программ.
28




Логика первого порядка (исчисление предикатов) –
формальное исчисление, допускающее высказывания
относительно переменных, фиксированных функций и
предикатов.
Граф потока управления – модель программы,
представляющая в виде ориентированного графа
потоки управления программы. Дуги графа
отображают возможный ход вычислительного
процесса, вершины графа соответствуют инструкциям
программы.

29

Mais conteúdo relacionado

Mais procurados

Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Andrey Karpov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика
2berkas
 

Mais procurados (20)

Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov Devexperts
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмов
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмов
 
8 3-4
8 3-48 3-4
8 3-4
 
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
8 3-3
8 3-38 3-3
8 3-3
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
8 3-5
8 3-58 3-5
8 3-5
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 

Destaque

TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
Iosif Itkin
 

Destaque (8)

TMPA-2013 Smirnov
TMPA-2013 SmirnovTMPA-2013 Smirnov
TMPA-2013 Smirnov
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
 
TMPA-2013 Sharov: Client Certification
TMPA-2013 Sharov: Client CertificationTMPA-2013 Sharov: Client Certification
TMPA-2013 Sharov: Client Certification
 
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
 
TMPA-2013 Keynote: Zakharov Obfuscation
TMPA-2013 Keynote: Zakharov ObfuscationTMPA-2013 Keynote: Zakharov Obfuscation
TMPA-2013 Keynote: Zakharov Obfuscation
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 

Semelhante a TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Analysis and Logical Inference

Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
Транслируем.бел
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование циклов
student_kai
 
Обработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетяхОбработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетях
Dmitry Protopopov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
etyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
IT_1315
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
Computer Science Club
 
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
paulsmirnov
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2
Technopark
 

Semelhante a TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Analysis and Logical Inference (20)

Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Основы MATLAB. Численные методы
Основы MATLAB. Численные методыОсновы MATLAB. Численные методы
Основы MATLAB. Численные методы
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Краткий экскурс в системы типов или как избежать дезинтеграции. Денис Редозубов
Краткий экскурс в системы типов или как избежать дезинтеграции. Денис РедозубовКраткий экскурс в системы типов или как избежать дезинтеграции. Денис Редозубов
Краткий экскурс в системы типов или как избежать дезинтеграции. Денис Редозубов
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование циклов
 
Использование поисковых машин и ресурсов Интернет для отбора терминов предмет...
Использование поисковых машин и ресурсов Интернет для отбора терминов предмет...Использование поисковых машин и ресурсов Интернет для отбора терминов предмет...
Использование поисковых машин и ресурсов Интернет для отбора терминов предмет...
 
Обработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетяхОбработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетях
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и вывода
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияПрогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
 
лекция 1
лекция 1лекция 1
лекция 1
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
 
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
Робастные методы и алгоритмы оценивания корреляционных характеристик данных н...
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2
 

Mais de Iosif Itkin

Mais de Iosif Itkin (20)

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesExactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test Oracles
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolExactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market Infrastructures
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AI
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresEXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiEXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenEXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
 
QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop Testing
 
Behaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileBehaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibile
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in Review
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and Strategy
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesFIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
 

TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Analysis and Logical Inference

  • 1. Обнаружение дефектов работы с указателями в программах на языках C/C++ с использованием статического анализа и логического вывода Татьяна Верт, Татьяна Крикун (Санкт-Петербургский государственный политехнический университет) Михаил Глухих (Технический университет Клаусталя)
  • 2.   Программное обеспечение содержит ошибки Функциональные ошибки o Программа не соответствует спецификации  Нефункциональные ошибки (программные дефекты) o Использование неинициализированных переменных o Некорректное использование указателей o Выходы за границы массивов 2
  • 3.   Полнота – доля истинных обнаруженных дефектов среди всех дефектов, имеющихся в программе Точность – доля истинных обнаруженных дефектов среди всех обнаруженных дефектов Два из Трех Высокая полнота Низкая ресурсоемкость Высокая точность 3
  • 4. 4
  • 5.    Анализ всех путей программы Раздельный анализ путей (высокая точность и высокая ресурсоёмкость) Совместный анализ путей (приемлемая ресурсоёмкость и низкая точность) 5
  • 6.    Зависимость – произвольная связь между значениями двух и более переменных программы Математически, зависимость может быть представлена в виде предиката Анализ зависимостей позволяет компенсировать погрешность, вызванную слиянием путей в ходе статического анализа 6
  • 7.  Использование средств логического вывода для доказательства различных утверждений в ходе статического анализа, в частности, утверждений о наличии либо отсутствии дефектов в отдельных операторах программы 7
  • 8. 8
  • 9.  Хранение состояния анализируемой программы в виде множества предикатов логики первого порядка Предикаты Точные значения (i=const, p=&obj+shift) Предикаты общего вида (type(obj1, obj2, ...) is true) Анализ точных значений Анализ зависимостей 9
  • 10. 10
  • 11.    Извлечение предикатов при интерпретации операторов Типы предикатов: – арифметические (A=B+C, A=B*C, A=B%C, и т. д.) – логические (A=¬B, A=B∨D, A=B∧D, A→B) – сравнения (A>B, A<B, A≥B, A≤B, A≠B) – работа с указателями(A=&B+C, A=*B) – обращение к составному объекту(A=B[C], A=B.C) – размер объекта(A = sizeof B, A ≤ sizeof B) –… Представление: 𝑝(𝑣1 , 𝑣2 , … , 𝑣 𝑛 ), где 𝑝 функциональный символ, 𝑣 𝑖 , 𝑖 = 1 … 𝑛 – предикатные переменные 11
  • 12.   Переменными предикатов являются другие предикаты Примеры: – 𝑜𝑛𝑒𝑜𝑓 𝑝1 , 𝑝2 – истинен хотя бы один из двух предикатов 𝑝1 , 𝑝2 – 𝑜𝑝𝑝𝑜𝑠(𝑝) – предикат 𝑝 ложен – 𝑒𝑞𝑢𝑖𝑣 𝑝1 , 𝑝2 – предикаты 𝑝1 и 𝑝2 одновременно истинны или одновременно ложны  Сложные предикаты также могут быть описаны в терминах логики первого порядка 12
  • 13.  Представление переменных на основе статического однократного присваивания (SSA): – Каждой переменной значение присваивается только один раз; – В случае присвоения нескольких значений используется версионирование переменных. x = a + b; x.1 = a.1 + b.1; y = x * x; y.1 = x.1 * x.1; x = c + d; x.2 = c.1 + d.1; 𝑠𝑢𝑚 𝑥1 , 𝑎1 , 𝑏1 mult 𝑦1 , 𝑥1 , 𝑥1 s𝑢𝑚 𝑥2 , 𝑐1 , 𝑑1 13
  • 14.  Выявление зависимостей при интерпретации: – операторов определения переменной – операторов прямого присваивания lvar=… • • • • • Присваивания lvar=rvar Присваивания lvar=binary(arg1, arg2) Присваивания lvar=unary(rvar) Присваивания адреса lvar=&rvar Присваивания через косвенную lvar=*rvar адресацию – операторов косвенного присваивания *lvar=rvalue – операторов ветвления if (cond) – операторов выделения/освобождения памяти 14
  • 15.    Объединение состояний программы в точках слияния путей Любое условие сохраняется на выходе фи-функции только в том случае, если оно имелось на всех её входах Если некоторой переменной программы 𝑣 соответствуют разные предикатные переменные 𝑣1 и 𝑣2 во входных состояниях, то для неё создается новая предикатная переменная 𝑣3 , при этом в выходное состояние добавляется предикат 𝑜𝑛𝑒𝑜𝑓(𝑒𝑞𝑢𝑎𝑙𝑠(𝑣3 , 𝑣1 ), 𝑒𝑞𝑢𝑎𝑙𝑠(𝑣3 , 𝑣2 )) 15
  • 16.  Если объект имеет разные версии в разных ветвях условного оператора, предикат, описывающий его значение, следует привязать к условию оператора if  Пример: if (size > 0) q = malloc(size); else q = 0; Предикатное состояние Истинная ветвь Ложная ветвь 𝑔𝑟𝑒𝑎𝑡𝑒𝑟 𝑠𝑖𝑧𝑒1 , 0 𝑙𝑒𝑠𝑠_𝑒𝑞𝑢𝑎𝑙𝑠 𝑠𝑖𝑧𝑒1 , 0 𝑠𝑖𝑧𝑒𝑜𝑓 𝑑𝑦𝑛, 𝑠𝑖𝑧𝑒1 𝑒𝑞𝑢𝑎𝑙𝑠 𝑞2 , 0 𝑝𝑡𝑟 𝑑𝑦𝑛, 𝑞1 , 0 Выходное состояние 𝑜𝑛𝑒𝑜𝑓(𝑒𝑞𝑢𝑎𝑙𝑠(𝑞3 , 𝑞1 ), 𝑒𝑞𝑢𝑎𝑙𝑠(𝑞3 , 𝑞2 )) 𝑒𝑞𝑢𝑖𝑣(𝑙𝑒𝑠𝑠_𝑒𝑞𝑢𝑎𝑙𝑠 𝑠𝑖𝑧𝑒1 , 0 , 𝑒𝑞𝑢𝑎𝑙𝑠 𝑞3 , 0 ) 16
  • 17.  Обнаружение дефектов при анализе операции разадресации *ptr и операции обращения по индексу ptr[i] • Некорректное использование указателей: int* ptr = 0; if (array[0]>0) ptr=array; int val=*ptr; //разадресация нулевого указателя • Выход за границу объекта int int i = a = a, i; array[9]; 10; array[i]; //выход за границу массива 17
  • 18.  Корректность указателя p = (void*)(&t)+s; v = sizeof(t); 𝑝𝑡𝑟 𝑡, 𝑝, 𝑠 , 𝑠𝑖𝑧𝑒𝑜𝑓 𝑡, 𝑣 , 𝑔𝑟𝑒𝑎𝑡𝑒𝑟_𝑒𝑞𝑢𝑎𝑙𝑠(𝑠, 0), 𝑙𝑒𝑠𝑠(𝑠, 𝑣) 𝑐𝑜𝑟𝑟𝑒𝑐𝑡_𝑝𝑡𝑟(𝑝)  Разадресация указателя v = *p; 1) Указатель на простую переменную p = (void*)(&t); 𝑝𝑡𝑟 𝑡,𝑝,0 ,𝑑𝑒𝑟𝑒𝑓(𝑝,𝑣) 𝑒𝑞𝑢𝑎𝑙𝑠(𝑡,𝑣) 2) Указатель на элемент составного объекта p = (void*)(&a)+s; t = *(&a +s); 𝑝𝑡𝑟 𝑎, 𝑝, 𝑠 , 𝑎𝑟𝑟 𝑎, 𝑡, 𝑠 , 𝑑𝑒𝑟𝑒𝑓(𝑝, 𝑣) 𝑒𝑞𝑢𝑎𝑙𝑠(𝑡, 𝑣) 18
  • 19.  Сложение указателя с целочисленной константой p = (void*)(&a)+s; t=s+b; q = p+b; 𝑝𝑡𝑟 𝑎, 𝑝, 𝑠 , 𝑠𝑢𝑚 𝑡, 𝑠, 𝑏 , 𝑠𝑢𝑚(𝑞, 𝑝, 𝑏) 𝑝𝑡𝑟(𝑎, 𝑞, 𝑡) 19
  • 20.   Присутствие дефекта – доказательство разрешимости предикатов: – нулевой указатель:𝑒𝑞𝑢𝑎𝑙𝑠(𝑝𝑡𝑟, 0) – некорректный указатель: 𝑜𝑝𝑝𝑜𝑠(𝑐𝑜𝑟𝑟𝑒𝑐𝑡_𝑝𝑡𝑟(𝑝𝑡𝑟)) Отсутствие дефекта – неразрешимость предикатов 20
  • 21. … int x,b; std::cin >> x; int arr[5]={0,1,2,3,4}; if (x>0){ b = arr[x]; } … Предикаты sizeof(arr, 20), equals(arr[0]_0, 0), equals(arr[1]_0, 1), equals(arr[2]_0, 2), equals(arr[3]_0, 3), equals(arr[4]_0, 4), greater(x_0, 0), ptr(arr, tmp1_0, 0)), mult(tmp2_0, x_0, 4), sum(tmp3_0, tmp1_0,tmp2_0) ptr(arr, tmp3, tmp2), sizeof(arr, 20), or(less(tmp2, 0), greater_equals(tmp2, 20)) = > oppos(correct_ptr(tmp3)) 21
  • 22.  Доказатели теорем – HOL Theorem Prover  Языки логического программирования – Bprolog  SMT-решатели – Z3 22
  • 24. Пример Истинных дефектов 1 2 3 4 5 6 7 8 1 2 1 2 0 2 0 2 Полнота Точность Среднее время Разработанная Aegis система (Digitek Labs) дефектов ложных дефектов ложных найдено дефектов найдено дефектов найдено найдено 1 0 1 0 2 0 0 0 1 0 1 0 2 0 3 1 0 0 1 1 2 0 3 1 0 0 2 2 1 0 1 0 … 95% 75% 95% 68% 53 сек. 5 сек. FlexeLint (Gimpel Software) дефектов ложных найдено дефектов найдено 1 0 0 0 0 0 3 1 1 1 1 1 1 1 1 0 45% 60% 4 сек. 24
  • 25.     Применение алгоритмов сборки мусора Применение алгоритмов упрощения состояния программы Разработка механизма выделения инвариантов цикла Обнаружение более широкого класса программных дефектов 25
  • 26.      Рассмотрен подход к статическому анализу с использованием средств логического вывода. Приведены правила извлечения предикатов из различных операторов анализируемой программы. Разработаны логические правила вывода для анализа указателей и обнаружения дефектов работы с указателями. Приведённые алгоритмы анализа реализованы в исследовательском прототипе на базе анализатора Aegis и SMT-решателя Microsoft Z3. Показано значительное повышение точности по сравнению с базовым анализатором. 26
  • 27. 27
  • 28.     Предикат – логическое утверждение, которое может быть как истинно, так и ложно, зависящее от ряда предикатных объектов. Зависимость – связь между значениями двух и более программных объектов. Фи-функция – точка слияния двух и более потоков выполнения программы. Абстрактная интерпретация – общая теория, которая задает способ аппроксимации семантики динамических дискретных систем, в том числе компьютерных программ. 28
  • 29.   Логика первого порядка (исчисление предикатов) – формальное исчисление, допускающее высказывания относительно переменных, фиксированных функций и предикатов. Граф потока управления – модель программы, представляющая в виде ориентированного графа потоки управления программы. Дуги графа отображают возможный ход вычислительного процесса, вершины графа соответствуют инструкциям программы. 29