SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Extended High-Level C-Compatible Memory Model 
with Limited Low-Level Pointer Cast Support for 
Jessie Intermediate Language 
Расширенная высокоуровневая 
C-совместимая модель памяти для промежуточного 
языка Jessie с частичной поддержкой 
низкоуровневого приведения типа указателей 
Алексей Хорошилов Михаил Мандрыкин 
Институт системного программирования РАН
Моделирование памяти 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a';
Низкоуровневая модель 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
константы a0, b0, d0 
константа c0 
константы n0 и m0 
……… 
b1=a0 / 
M1=M0[b1 +32 n ← 08] / 
M2=M1[b1 +32 n +32 132 ← 08] / 
M3=M2[b1 +32 n+32 232 ← 08] / 
M4=M3[b1 +32 n+32 332← 18] / 
M5=M4[d0 +32 m ←08] / 
M6=M5[d0 +32 m +32 132←08] / 
M7=M6[d0 +32 m+32 232←08] / 
M8=M7[d0 +32 m+32 332←28] / 
M9=M8[c0 +32 132←978]
Низкоуровневая модель 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
(a0 ≤ d0− 16 / a0 ≥ d0+ 16) / 
(a0 ≤ c0− 16 / a0 ≥ c0+ 4) / 
(d0 ≤ c0− 16 / d0 ≥ c0+ 4) 
……… 
b1=a0 / 
M1=M0[b1 +32 n ← 08] / 
M2=M1[b1 +32 n +32 132 ← 08] / 
M3=M2[b1 +32 n+32 232 ← 08] / 
M4=M3[b1 +32 n+32 332← 18] / 
M5=M4[d0 +32 m ←08] / 
M6=M5[d0 +32 m +32 132←08] / 
M7=M6[d0 +32 m+32 232←08] / 
M8=M7[d0 +32 m+32 332←28] / 
M9=M8[c0 +32 132←978]
Низкоуровневая модель с регионами 
a, b 
d 
c 
a b 
a b 
a b 
a b 
a, b 
a b
Низкоуровневая модель с регионами 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
……… 
b1=a0 / 
Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / 
Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / 
Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / 
Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / 
Md0, 1 =Md0, 0[d0 +32 m ← 08] / 
Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / 
Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / 
Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / 
Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] 
a, b 
d 
c
Низкоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
} 
(a0 ≤ d0− 16 / a0 ≥ d0+ 16) / 
(a0 ≤ c0− 16 / a0 ≥ c0+ 4) / 
(d0 ≤ c0− 16 / d0 ≥ c0+ 4) 
……… 
b1=a0 / 
Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / 
Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / 
Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / 
Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / 
Md0, 1 =Md0, 0[d0 +32 m ← 08] / 
Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / 
Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / 
Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / 
Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] 
предусловие 
a, b 
d 
c
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
} 
(a0 ≤ d0− 16 / a0 ≥ d0+ 16) 
……… 
b1=a0 / 
Mint 
a0, 1=Mint 
a0, 0[b1 +32 n ← 08] / 
Mint 
a0, 2=Mint 
a0, 1[b1 +32 n +32 132 ← 08] / 
Mint 
a0, 3=Mint 
a0, 2[b1 +32 n+32 232 ← 08] / 
Mint 
a0, 4=Mint 
a0, 3[b1 +32 n+32 332 ← 18] / 
Mint 
d0, 1=Mint 
d0, 0[d0 +32 m ← 08] / 
Mint 
d0, 2=Mint 
d0, 1[d0 +32 m +32 132 ← 08] / 
Mint 
d0, 3=Mint 
d0, 2[d0 +32 m+32 232 ← 08] / 
Mint 
d0, 4=Mint 
d0, 3[d0 +32 m+32 332 ← 28] / 
Mint 
c0, 1=Mchar 
c0, 0[c0 +32 132 ← 978] 
предусловие 
a, b 
32-бит. 
d 
32-бит. 
с 
8-бит.
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
} 
(a0 ≤ d0− 4 / a0 ≥ d0+ 4) 
……… 
b1=a0 / 
Mint 
a0, 0=Mint 
a0, 0[b1 +32 n ← 132] / 
Mint 
d0, 0=Mint 
d0, 0[d0 +32 m ← 232] / 
Mint 
c0, 0=Mchar 
c0, 0[c0 +32 132 ← 978] 
предусловие 
a, b 
32-бит. 
d 
32-бит. 
с 
8-бит.
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; 
c[1] = 'a'; 
} 
(a0 ≤ d0− 4 / a0 ≥ d0+ 4) 
……… 
b1=a0 / 
Mint 
a0, 1=Mint 
a0, 0[b1 + n ← 1] / 
Mint 
d0, 1=Mint 
d0, 0[d0 + m ← 2] / 
Mint 
c0, 1=Mchar 
c0, 0[c0 + 1 ← 97] 
предусловие 
a, b 
int32 
d 
int32 
с 
int8
Поддержка структур 
struct derived { 
size_t size; 
char data[8]; 
}; 
struct derived *d; 
struct derived *pd = &d; 
……… 
pd->data[1] = 0; 
pd->size = 2; 
&d, pd 
drived.data 
……… 
pd1=d0 / 
Mint8 
int8* 
&d, pd 
derived.size 
uint32 
d0.data, 
pd→data 
int8 
d0.data, 1=Mint8 
d0.data, 0[Mint8* 
(d0, derived.data), 0[pd0] +1 ← 0] / 
Muint32 
(d0, derived.size), 1[pd0]=Muint32 
(d0, derived.size), 0[pd0 ← 2]
Поддержка префиксного кастирования 
struct base 
size_t size; 
}; 
struct derived { 
struct base base; 
char data[8]; 
}; 
struct derived *d; 
struct derived *pd = &d; 
&d, pd 
drived.data 
int8* 
((struct base *) pd)->size = 2; 
Muint32 
&d, pd 
base.size 
uint32 
d0.data, 
pd→data 
int8 
(d0, base.size), 1[pd0]=Muint32 
(d0, base.size), 0[pd0 ← 2]
Поддержка префиксного кастирования
Поддержка переинтерпретации 
void set_w16(void *p, unsigned short v) 
{ 
unsigned char *ptr = (unsigned char *) p; 
ptr[0] = v & 0xff; 
ptr[1] = (v >> 8) & 0xff; 
} 
p (unisnged char *) p 
p 
uint16 
?
Поддержка переинтерпретации
Поддержка переинтерпретации 
p (unisnged char *) p 
p 
uint16 
? 
p (unisnged char *) p 
p 
uint16 
(unsigned char *) p 
uint8 
(char *) p 
? 
(char *) p 
(char *) p 
int8
p 
Поддержка переинтерпретации 
p 
uint16 
(unisnged char *) p 
(unsigned char *) 
(char *) … 
(...*) (p + n) 
uint8 
(char *) p 
(char *) … 
(... *) (p – n) 
int8
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
if (*q == 5) { 
//...
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
if (*q == 5) { 
//... 
здесь нужна 
синхронизация 
памятей регионов 
p и (char *) p 
и здесь тоже!
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
//@ jessie pragma p :> char *; 
*((char *) p) = 6; 
//@ jessie pragma ((char * )p) :> unsigned short *; 
if (*q == 5) { 
//...
Решение проблемы когерентности 
Jessie 
поддерживает проверку условий 
корректности защиты памяти!
Решение проблемы когерентности 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
//@ jessie pragma ((char * )p) :> unsigned short *; 
if (q == 5) { 
//... 
не валидно!
Поддержка переинтерпретации
Поддержка переинтерпретации
Направления дальнейшей работы 
➔ unsigned char p[5]; 
unsigned short *q = (unsigned short *) &p; 
5 не кратно sizeof (unsigned short) 
– в статье предложено дальнейшее 
расширение языка Jessie; 
➔ cтруктуры с несколькими полями, в том 
числе с выравниванием; 
➔ применение к коду модулей ядра Linux

Contenu connexe

Tendances

ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселVladimir Parfinenko
 
Тема «Квадратные уравнения. Виды квадратных уравнений»
Тема «Квадратные уравнения. Виды квадратных уравнений»Тема «Квадратные уравнения. Виды квадратных уравнений»
Тема «Квадратные уравнения. Виды квадратных уравнений»Kirrrr123
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массиваDEVTYPE
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая памятьDEVTYPE
 
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированиягенераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированияhmyrhik nikita
 
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...Kirrrr123
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиTatiana Volkova
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияTatiana Volkova
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingTatiana Volkova
 
алгоритмизация метода касательных
алгоритмизация метода касательныхалгоритмизация метода касательных
алгоритмизация метода касательныхColegiul de Industrie Usoara
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыTatiana Volkova
 
Kod chisl
Kod chislKod chisl
Kod chisltexnic
 
Проблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерахПроблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерахTatyanazaxarova
 
связь криволинейныхю поверхностных и кратных интегралов
связь криволинейныхю поверхностных и кратных интеграловсвязь криволинейныхю поверхностных и кратных интегралов
связь криволинейныхю поверхностных и кратных интеграловLê Hoà
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3Andrei V, Zhuravlev
 
Differencirovanie pokazatelnoj i_logarifmicheskoj_
Differencirovanie pokazatelnoj i_logarifmicheskoj_Differencirovanie pokazatelnoj i_logarifmicheskoj_
Differencirovanie pokazatelnoj i_logarifmicheskoj_Иван Иванов
 
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...Ontico
 
Jekstremumy funkcii
Jekstremumy funkciiJekstremumy funkcii
Jekstremumy funkciiIvanchik5
 
Matlab: Написание m-файла
Matlab: Написание m-файлаMatlab: Написание m-файла
Matlab: Написание m-файлаDmitry Bulgakov
 

Tendances (20)

ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чисел
 
Тема «Квадратные уравнения. Виды квадратных уравнений»
Тема «Квадратные уравнения. Виды квадратных уравнений»Тема «Квадратные уравнения. Виды квадратных уравнений»
Тема «Квадратные уравнения. Виды квадратных уравнений»
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
 
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированиягенераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
 
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...
Урок математики в 7 классе "Применение формул сокращенного умножения для вычи...
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в Processing
 
алгоритмизация метода касательных
алгоритмизация метода касательныхалгоритмизация метода касательных
алгоритмизация метода касательных
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
 
Kod chisl
Kod chislKod chisl
Kod chisl
 
идз4.1 2
идз4.1 2идз4.1 2
идз4.1 2
 
Проблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерахПроблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерах
 
связь криволинейныхю поверхностных и кратных интегралов
связь криволинейныхю поверхностных и кратных интеграловсвязь криволинейныхю поверхностных и кратных интегралов
связь криволинейныхю поверхностных и кратных интегралов
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
 
Differencirovanie pokazatelnoj i_logarifmicheskoj_
Differencirovanie pokazatelnoj i_logarifmicheskoj_Differencirovanie pokazatelnoj i_logarifmicheskoj_
Differencirovanie pokazatelnoj i_logarifmicheskoj_
 
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...
 
Jekstremumy funkcii
Jekstremumy funkciiJekstremumy funkcii
Jekstremumy funkcii
 
Matlab: Написание m-файла
Matlab: Написание m-файлаMatlab: Написание m-файла
Matlab: Написание m-файла
 

Similaire à Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language

Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Поговорим про арифметику
Поговорим про арифметикуПоговорим про арифметику
Поговорим про арифметикуAndrey Akinshin
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 КонстантностьDEVTYPE
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Yandex
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Сколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьСколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьQrator Labs
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 

Similaire à Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language (20)

Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Поговорим про арифметику
Поговорим про арифметикуПоговорим про арифметику
Поговорим про арифметику
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Сколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьСколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делать
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
8165
81658165
8165
 

Plus de Iosif Itkin

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Iosif Itkin
 
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...Iosif Itkin
 
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 OraclesIosif Itkin
 
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 ProtocolIosif Itkin
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresIosif Itkin
 
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 SeasonIosif Itkin
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AIIosif Itkin
 
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 InfrastructuresIosif Itkin
 
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...Iosif Itkin
 
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 ShamraiIosif Itkin
 
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 OpenIosif Itkin
 
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...Iosif Itkin
 
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...Iosif Itkin
 
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)Iosif Itkin
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop TestingIosif Itkin
 
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 possibileIosif Itkin
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in ReviewIosif Itkin
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyIosif Itkin
 
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 ChallengesIosif Itkin
 
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)Iosif Itkin
 

Plus 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)
 

Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language

  • 1. Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language Расширенная высокоуровневая C-совместимая модель памяти для промежуточного языка Jessie с частичной поддержкой низкоуровневого приведения типа указателей Алексей Хорошилов Михаил Мандрыкин Институт системного программирования РАН
  • 2. Моделирование памяти int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a';
  • 3. Низкоуровневая модель int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; константы a0, b0, d0 константа c0 константы n0 и m0 ……… b1=a0 / M1=M0[b1 +32 n ← 08] / M2=M1[b1 +32 n +32 132 ← 08] / M3=M2[b1 +32 n+32 232 ← 08] / M4=M3[b1 +32 n+32 332← 18] / M5=M4[d0 +32 m ←08] / M6=M5[d0 +32 m +32 132←08] / M7=M6[d0 +32 m+32 232←08] / M8=M7[d0 +32 m+32 332←28] / M9=M8[c0 +32 132←978]
  • 4. Низкоуровневая модель int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; (a0 ≤ d0− 16 / a0 ≥ d0+ 16) / (a0 ≤ c0− 16 / a0 ≥ c0+ 4) / (d0 ≤ c0− 16 / d0 ≥ c0+ 4) ……… b1=a0 / M1=M0[b1 +32 n ← 08] / M2=M1[b1 +32 n +32 132 ← 08] / M3=M2[b1 +32 n+32 232 ← 08] / M4=M3[b1 +32 n+32 332← 18] / M5=M4[d0 +32 m ←08] / M6=M5[d0 +32 m +32 132←08] / M7=M6[d0 +32 m+32 232←08] / M8=M7[d0 +32 m+32 332←28] / M9=M8[c0 +32 132←978]
  • 5. Низкоуровневая модель с регионами a, b d c a b a b a b a b a, b a b
  • 6. Низкоуровневая модель с регионами int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; ……… b1=a0 / Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / Md0, 1 =Md0, 0[d0 +32 m ← 08] / Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] a, b d c
  • 7. Низкоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 16 / a0 ≥ d0+ 16) / (a0 ≤ c0− 16 / a0 ≥ c0+ 4) / (d0 ≤ c0− 16 / d0 ≥ c0+ 4) ……… b1=a0 / Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / Md0, 1 =Md0, 0[d0 +32 m ← 08] / Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] предусловие a, b d c
  • 8. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 16 / a0 ≥ d0+ 16) ……… b1=a0 / Mint a0, 1=Mint a0, 0[b1 +32 n ← 08] / Mint a0, 2=Mint a0, 1[b1 +32 n +32 132 ← 08] / Mint a0, 3=Mint a0, 2[b1 +32 n+32 232 ← 08] / Mint a0, 4=Mint a0, 3[b1 +32 n+32 332 ← 18] / Mint d0, 1=Mint d0, 0[d0 +32 m ← 08] / Mint d0, 2=Mint d0, 1[d0 +32 m +32 132 ← 08] / Mint d0, 3=Mint d0, 2[d0 +32 m+32 232 ← 08] / Mint d0, 4=Mint d0, 3[d0 +32 m+32 332 ← 28] / Mint c0, 1=Mchar c0, 0[c0 +32 132 ← 978] предусловие a, b 32-бит. d 32-бит. с 8-бит.
  • 9. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 4 / a0 ≥ d0+ 4) ……… b1=a0 / Mint a0, 0=Mint a0, 0[b1 +32 n ← 132] / Mint d0, 0=Mint d0, 0[d0 +32 m ← 232] / Mint c0, 0=Mchar c0, 0[c0 +32 132 ← 978] предусловие a, b 32-бит. d 32-бит. с 8-бит.
  • 10. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 4 / a0 ≥ d0+ 4) ……… b1=a0 / Mint a0, 1=Mint a0, 0[b1 + n ← 1] / Mint d0, 1=Mint d0, 0[d0 + m ← 2] / Mint c0, 1=Mchar c0, 0[c0 + 1 ← 97] предусловие a, b int32 d int32 с int8
  • 11. Поддержка структур struct derived { size_t size; char data[8]; }; struct derived *d; struct derived *pd = &d; ……… pd->data[1] = 0; pd->size = 2; &d, pd drived.data ……… pd1=d0 / Mint8 int8* &d, pd derived.size uint32 d0.data, pd→data int8 d0.data, 1=Mint8 d0.data, 0[Mint8* (d0, derived.data), 0[pd0] +1 ← 0] / Muint32 (d0, derived.size), 1[pd0]=Muint32 (d0, derived.size), 0[pd0 ← 2]
  • 12. Поддержка префиксного кастирования struct base size_t size; }; struct derived { struct base base; char data[8]; }; struct derived *d; struct derived *pd = &d; &d, pd drived.data int8* ((struct base *) pd)->size = 2; Muint32 &d, pd base.size uint32 d0.data, pd→data int8 (d0, base.size), 1[pd0]=Muint32 (d0, base.size), 0[pd0 ← 2]
  • 14. Поддержка переинтерпретации void set_w16(void *p, unsigned short v) { unsigned char *ptr = (unsigned char *) p; ptr[0] = v & 0xff; ptr[1] = (v >> 8) & 0xff; } p (unisnged char *) p p uint16 ?
  • 16. Поддержка переинтерпретации p (unisnged char *) p p uint16 ? p (unisnged char *) p p uint16 (unsigned char *) p uint8 (char *) p ? (char *) p (char *) p int8
  • 17. p Поддержка переинтерпретации p uint16 (unisnged char *) p (unsigned char *) (char *) … (...*) (p + n) uint8 (char *) p (char *) … (... *) (p – n) int8
  • 18. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; if (*q == 5) { //...
  • 19. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; if (*q == 5) { //... здесь нужна синхронизация памятей регионов p и (char *) p и здесь тоже!
  • 20. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; //@ jessie pragma p :> char *; *((char *) p) = 6; //@ jessie pragma ((char * )p) :> unsigned short *; if (*q == 5) { //...
  • 21. Решение проблемы когерентности Jessie поддерживает проверку условий корректности защиты памяти!
  • 22. Решение проблемы когерентности unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; //@ jessie pragma ((char * )p) :> unsigned short *; if (q == 5) { //... не валидно!
  • 25. Направления дальнейшей работы ➔ unsigned char p[5]; unsigned short *q = (unsigned short *) &p; 5 не кратно sizeof (unsigned short) – в статье предложено дальнейшее расширение языка Jessie; ➔ cтруктуры с несколькими полями, в том числе с выравниванием; ➔ применение к коду модулей ядра Linux