SlideShare a Scribd company logo
1 of 9
Download to read offline
Семантические инварианты
    проверяемые верификатором
• Корректность стековых операций (у Java
  нетипизированный стек)
• Совместимость типов при записи в поля
  класса
• Доступ к локалам (локалы тоже
  нетипизированные)
• Использование методов в соответствии с
  сигнатурой (количество, тип)
•    Доступ к методам и полям других классов
• Исполнение try/catch/finally блоков

                                               1
Лирическое отступление

 static boolean finallyFun(boolean confuseJavac) {
        while (confuseJavac)
        {
             try {
                return true;
             }
             finally {
                break;
             }
          }
          return false;
       }*
 _______
 * - пример Билла Веннерса
   http://www.artima.com/underthehood/finally2.html
                                                      2
Вопросы

• Можно ли в верифицируемый
  классфайл включить картинку? А
  исполняемый код x86?
• Осмысленна ли комбинация
  ACC_NATIVE | ACC_ABSTRACT,
  почему?
• Что бы вы добавили в формат
  классфайла?
• А что бы удалили (если обратная
  совместимость не проблема)?
                                    3
Совместимость типов *




______________

* Картинка Кирилла Широкова




                              4
Проверка корректности метода
Начальное состояние стека – пустое, локалы - сигнатура метода
  todo ← true
  while todo = true do
    todo ← false
    for all i in all instructions of a method do
     if i was changed then
       todo ← true
     check whether stack and local variable types match definition of i
     calculate new state after i
     for all s in all successor instructions of i do
      if current state for s ≠ new state derived from i then
        assume state after i as new entry state for s
        mark s as changed
       end if
      end for
     end if
    end for
   end while                                                              5
Верификация
• Абстрактный интерпретатор оперирующий с типами ( а
  не значениями), выполняет DFA
• Типичное время исполнения O(n log 2 t )
   n – количество байткодов в методе,
   t – количество элементов в иерархии классов
• Возможно построение байткода с временем
  верификации    O( n 2 )




                                                  6
Двухфазная верификация
• Сотрудничество компилятора и JVM (описан в
  JSR 202, спецификация на Прологе)
• Новый атрибут StackMapTable, обязателен
  для классов версии начиная с 50 при наличии
  ветвлений или исключений
• Фиксированные точки DFA в начале базовых
  блоков
• Дальше абстрактная интерпретация
• Верификатор только проверяет корректность
  предоставленной информации
• Сложность времени исполнения O(n)
                                           7
Пример неверифицируемого кода
/* только для старого javac, порождающего jsr */

int test(boolean b) {
    int i;        /* не инициализировано */

    try {
         if (b) return 1;
         i = 2;
    } finally {     /* при входе сюда i может быть не определено */

         if (b) i = 3;   /* но мы его определяем */

     }
    return i;      /* и, возможно, возвращаем */

}                                                                8
Вопросы

• Почему верификация не заменена
  подписыванием кода?
• Что верификатор может сообщить
  JITу?
• Попробуйте построить примеры
  элементы дополнений со слайда 3
• Сколько фактических ошибок вы
  найдѐте в этом тексте
  http://www.insidepro.com/kk/215/215r.sh
  tml ?
                                        9

More Related Content

What's hot

Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовYandex
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"OdessaQA
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Tatyanazaxarova
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...Iosif Itkin
 
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Elias Fofanov
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеElias Fofanov
 
учебник по теме алгоритмизации
учебник по теме алгоритмизацииучебник по теме алгоритмизации
учебник по теме алгоритмизацииhudooognik
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выраженияTatyanazaxarova
 
Dynamic Ruby. Lesson #3: Blocks, procs and lambdas
Dynamic Ruby. Lesson #3: Blocks, procs and lambdasDynamic Ruby. Lesson #3: Blocks, procs and lambdas
Dynamic Ruby. Lesson #3: Blocks, procs and lambdasAlex Mikitenko
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...Iosif Itkin
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст примененияNikita Baksalyar
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model LibraryAndrey Gordienkov
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformIosif Itkin
 

What's hot (20)

Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
 
Lec 15
Lec 15Lec 15
Lec 15
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
 
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
 
учебник по теме алгоритмизации
учебник по теме алгоритмизацииучебник по теме алгоритмизации
учебник по теме алгоритмизации
 
запахи кода
запахи кодазапахи кода
запахи кода
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
Dynamic Ruby. Lesson #3: Blocks, procs and lambdas
Dynamic Ruby. Lesson #3: Blocks, procs and lambdasDynamic Ruby. Lesson #3: Blocks, procs and lambdas
Dynamic Ruby. Lesson #3: Blocks, procs and lambdas
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст применения
 
Step 2
Step 2Step 2
Step 2
 
PostSharp - Threading Model
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE Platform
 

Viewers also liked

Checklist for Research and Planning Blogs
Checklist for Research and Planning BlogsChecklist for Research and Planning Blogs
Checklist for Research and Planning Blogsguidedbyboognish
 
Aplikační seminář 2012: lidé a projekty
Aplikační seminář 2012: lidé a projektyAplikační seminář 2012: lidé a projekty
Aplikační seminář 2012: lidé a projektyKISK FF MU
 
Employee Testimonials
Employee TestimonialsEmployee Testimonials
Employee TestimonialsLauren Lorey
 
Martina Geržová (Letní škola 2013)
Martina Geržová (Letní škola 2013)Martina Geržová (Letní škola 2013)
Martina Geržová (Letní škola 2013)KISK FF MU
 
interactive
interactiveinteractive
interactiveosmego
 
Kodeks
KodeksKodeks
KodeksTeresa
 
20120513 repeatsinsymbolicsequences shur_lecture05-06
20120513 repeatsinsymbolicsequences shur_lecture05-0620120513 repeatsinsymbolicsequences shur_lecture05-06
20120513 repeatsinsymbolicsequences shur_lecture05-06Computer Science Club
 
Интурмаркет 2013 Как сделать сайт туристической компании удобнее
Интурмаркет 2013 Как сделать сайт туристической компании удобнееИнтурмаркет 2013 Как сделать сайт туристической компании удобнее
Интурмаркет 2013 Как сделать сайт туристической компании удобнееMaria Chaykina
 
Rainsynth 제작과정 #2
Rainsynth 제작과정 #2Rainsynth 제작과정 #2
Rainsynth 제작과정 #2Yeongho Kim
 
Pairing with the queen
Pairing with the queenPairing with the queen
Pairing with the queenDiego Pacheco
 
Saving A Graph On Your Graphing Calculator
Saving A Graph On Your Graphing CalculatorSaving A Graph On Your Graphing Calculator
Saving A Graph On Your Graphing CalculatorTikina Vontray
 
Italian Conference on Nagios: Michael Medin on Windows Monitoring
Italian Conference on Nagios: Michael Medin on Windows MonitoringItalian Conference on Nagios: Michael Medin on Windows Monitoring
Italian Conference on Nagios: Michael Medin on Windows MonitoringWürth Phoenix
 
20091025 cryptoprotocols nikolenko_lecture06
20091025 cryptoprotocols nikolenko_lecture0620091025 cryptoprotocols nikolenko_lecture06
20091025 cryptoprotocols nikolenko_lecture06Computer Science Club
 

Viewers also liked (20)

Checklist for Research and Planning Blogs
Checklist for Research and Planning BlogsChecklist for Research and Planning Blogs
Checklist for Research and Planning Blogs
 
Spmnanopres
SpmnanopresSpmnanopres
Spmnanopres
 
Aplikační seminář 2012: lidé a projekty
Aplikační seminář 2012: lidé a projektyAplikační seminář 2012: lidé a projekty
Aplikační seminář 2012: lidé a projekty
 
Employee Testimonials
Employee TestimonialsEmployee Testimonials
Employee Testimonials
 
Martina Geržová (Letní škola 2013)
Martina Geržová (Letní škola 2013)Martina Geržová (Letní škola 2013)
Martina Geržová (Letní škola 2013)
 
Herramientas web 2.0
Herramientas web 2.0Herramientas web 2.0
Herramientas web 2.0
 
на сайт
на сайтна сайт
на сайт
 
interactive
interactiveinteractive
interactive
 
Kodeks
KodeksKodeks
Kodeks
 
20120513 repeatsinsymbolicsequences shur_lecture05-06
20120513 repeatsinsymbolicsequences shur_lecture05-0620120513 repeatsinsymbolicsequences shur_lecture05-06
20120513 repeatsinsymbolicsequences shur_lecture05-06
 
Boardmasters
BoardmastersBoardmasters
Boardmasters
 
Интурмаркет 2013 Как сделать сайт туристической компании удобнее
Интурмаркет 2013 Как сделать сайт туристической компании удобнееИнтурмаркет 2013 Как сделать сайт туристической компании удобнее
Интурмаркет 2013 Как сделать сайт туристической компании удобнее
 
Rainsynth 제작과정 #2
Rainsynth 제작과정 #2Rainsynth 제작과정 #2
Rainsynth 제작과정 #2
 
Pairing with the queen
Pairing with the queenPairing with the queen
Pairing with the queen
 
Saving A Graph On Your Graphing Calculator
Saving A Graph On Your Graphing CalculatorSaving A Graph On Your Graphing Calculator
Saving A Graph On Your Graphing Calculator
 
Italian Conference on Nagios: Michael Medin on Windows Monitoring
Italian Conference on Nagios: Michael Medin on Windows MonitoringItalian Conference on Nagios: Michael Medin on Windows Monitoring
Italian Conference on Nagios: Michael Medin on Windows Monitoring
 
Spring Capitulo 04
Spring Capitulo 04Spring Capitulo 04
Spring Capitulo 04
 
20091025 cryptoprotocols nikolenko_lecture06
20091025 cryptoprotocols nikolenko_lecture0620091025 cryptoprotocols nikolenko_lecture06
20091025 cryptoprotocols nikolenko_lecture06
 
Miradas inocentes
Miradas inocentesMiradas inocentes
Miradas inocentes
 
Audience feeback
Audience feebackAudience feeback
Audience feeback
 

Similar to 20100321 virtualization igotti_lecture08

Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirCodeFest
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?Oleg Poludnenko
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Development User Group
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C codeDenis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 

Similar to 20100321 virtualization igotti_lecture08 (20)

Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Lab5
Lab5Lab5
Lab5
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Bytecode
BytecodeBytecode
Bytecode
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 

More from Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20100321 virtualization igotti_lecture08

  • 1. Семантические инварианты проверяемые верификатором • Корректность стековых операций (у Java нетипизированный стек) • Совместимость типов при записи в поля класса • Доступ к локалам (локалы тоже нетипизированные) • Использование методов в соответствии с сигнатурой (количество, тип) • Доступ к методам и полям других классов • Исполнение try/catch/finally блоков 1
  • 2. Лирическое отступление static boolean finallyFun(boolean confuseJavac) { while (confuseJavac) { try { return true; } finally { break; } } return false; }* _______ * - пример Билла Веннерса http://www.artima.com/underthehood/finally2.html 2
  • 3. Вопросы • Можно ли в верифицируемый классфайл включить картинку? А исполняемый код x86? • Осмысленна ли комбинация ACC_NATIVE | ACC_ABSTRACT, почему? • Что бы вы добавили в формат классфайла? • А что бы удалили (если обратная совместимость не проблема)? 3
  • 4. Совместимость типов * ______________ * Картинка Кирилла Широкова 4
  • 5. Проверка корректности метода Начальное состояние стека – пустое, локалы - сигнатура метода todo ← true while todo = true do todo ← false for all i in all instructions of a method do if i was changed then todo ← true check whether stack and local variable types match definition of i calculate new state after i for all s in all successor instructions of i do if current state for s ≠ new state derived from i then assume state after i as new entry state for s mark s as changed end if end for end if end for end while 5
  • 6. Верификация • Абстрактный интерпретатор оперирующий с типами ( а не значениями), выполняет DFA • Типичное время исполнения O(n log 2 t ) n – количество байткодов в методе, t – количество элементов в иерархии классов • Возможно построение байткода с временем верификации O( n 2 ) 6
  • 7. Двухфазная верификация • Сотрудничество компилятора и JVM (описан в JSR 202, спецификация на Прологе) • Новый атрибут StackMapTable, обязателен для классов версии начиная с 50 при наличии ветвлений или исключений • Фиксированные точки DFA в начале базовых блоков • Дальше абстрактная интерпретация • Верификатор только проверяет корректность предоставленной информации • Сложность времени исполнения O(n) 7
  • 8. Пример неверифицируемого кода /* только для старого javac, порождающего jsr */ int test(boolean b) { int i; /* не инициализировано */ try { if (b) return 1; i = 2; } finally { /* при входе сюда i может быть не определено */ if (b) i = 3; /* но мы его определяем */ } return i; /* и, возможно, возвращаем */ } 8
  • 9. Вопросы • Почему верификация не заменена подписыванием кода? • Что верификатор может сообщить JITу? • Попробуйте построить примеры элементы дополнений со слайда 3 • Сколько фактических ошибок вы найдѐте в этом тексте http://www.insidepro.com/kk/215/215r.sh tml ? 9