SlideShare a Scribd company logo
Системы
верификации байткода в JVM




               Николай Иготти
Функциональность
 верификатора
• Требования к .class-файлу чѐтко описаны
  стандартом Java – верификатор проверяет
  это соответствие
• Является важной частью системы
  безопасности
• Предоставляет гарантии исполняющей
  компоненте
• В общем случае верификатор должен
  решать NP-полную задачу
• Реальные решения – компромисс
• Доказывать или проверять?
                                            2
Фазы работы верификатора

• Проверка формата классфайла (длина,
  magic, базовая структура)
• Линковка класса (пул констант, иерархия
  наследования, использование final)
• Линковка метода (верность инструкций
  байткода, обработка исключений, обработка
  jsr/ret, семантическая корректность)
• Вызов метода или первое исполнение
  (наличие, сигнатурная совместимость,
  контроль доступа)


                                              3
Формат классфайла
u4 MAGIC (== 0xCAFEBABE)
u2 MINOR VERSION
u2 MAJOR VERSION
u2 constant_pool_count
cp_info constant_pool[constant_pool_count-1]
u2 access_flags
u2 this_class
u2 super_class
u2 interfaces_count
u2 interfaces[interfaces_count]
u2 fields_count
field_info fields[fields_count]
u2 methods_count
method_info methods[methods_count]
u2 attributes_count
attribute_info attributes[attributes_count]
                                               4
Пул констант
u1 tag                   u1 info[ ]

Тип                                   Значение

CONSTANT_Class                        7
CONSTANT_Fieldref                     9
CONSTANT_Methodref                    10
CONSTANT_InterfaceMethodref           11
CONSTANT_String                       8
CONSTANT_Integer                      3
CONSTANT_Float                        4
CONSTANT_Long                         5
CONSTANT_Double                       6
CONSTANT_NameAndType                  12
CONSTANT_Utf8                         1

                                                 5
Описание метода

• Доступ (маска ACC_PUBLIC , ACC_PRIVATE
  ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
  ACC_SYNCHRONIZED, ACC_NATIVE , ACC_ABSTRACT
  ACC_STRICT)

• Сигнатура (параметры, возвращаемое
  значение) – строки Utf8, например [[IL
• Список атрибутов (включая
  предопределѐнные: Code, ConstantValue,
  Exceptions, InnerClasses, Synthetic и т.п.)
• Code содержит информацию о количестве
  локалов, необходимом стеке, обработчиках
  исключений, байткод метода (4 байта))
                                                6
Семантические инварианты
    проверяемые верификатором
• Корректность стековых операций (у Java
  нетипизированный стек)
• Совместимость типов при записи в поля
  класса
• Доступ к локалам (локалы тоже
  нетипизированные)
• Использование методов в соответствии с
  сигнатурой (количество, тип)
•    Доступ к методам и полям других классов
• Исполнение try/catch/finally блоков

                                               7

More Related Content

What's hot

Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
Unguryan Vitaliy
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
Unguryan Vitaliy
 
Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Java
metaform
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
Anton Moiseenko
 
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
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
Unguryan Vitaliy
 
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
 
Proizvodnaya slozhnoj funkcii
Proizvodnaya slozhnoj funkciiProizvodnaya slozhnoj funkcii
Proizvodnaya slozhnoj funkcii
Dimon4
 

What's hot (11)

Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 
Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Java
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 
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.
 
02 if for
02 if for02 if for
02 if for
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
 
Tipi dannih
Tipi dannihTipi dannih
Tipi dannih
 
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.
 
Proizvodnaya slozhnoj funkcii
Proizvodnaya slozhnoj funkciiProizvodnaya slozhnoj funkcii
Proizvodnaya slozhnoj funkcii
 

Viewers also liked

Sólidos platónicos
Sólidos platónicosSólidos platónicos
Sólidos platónicos
juliana tamayo
 
Bela negara
Bela negaraBela negara
Gráfico diario del ibex 35 para el 16 12 2011
Gráfico diario del ibex 35 para el 16 12 2011Gráfico diario del ibex 35 para el 16 12 2011
Gráfico diario del ibex 35 para el 16 12 2011
Experiencia Trading
 
36
3636
How Sweet is the Evidence in Policy?
How Sweet is the Evidence in Policy?How Sweet is the Evidence in Policy?
How Sweet is the Evidence in Policy?
Corn Refiners Association
 
Substâncias
SubstânciasSubstâncias
Radiology finding new meaning in “meaningful use”
Radiology finding new meaning in “meaningful use”Radiology finding new meaning in “meaningful use”
Radiology finding new meaning in “meaningful use”
Medical Billers and Coders
 
Cinemática vetorial
Cinemática vetorialCinemática vetorial
Cinemática vetorial
WALTER ALENCAR DE SOUSA
 
Boekaanbieding heilig verweer
Boekaanbieding heilig verweerBoekaanbieding heilig verweer
Boekaanbieding heilig verweer
Arjaan Hijmans van den Bergh
 
Petróleo
PetróleoPetróleo
Petróleo
Rafael Nishikawa
 
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leituraUnesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
felipe fagnani
 
Signolingustico 130722180318-phpapp02
Signolingustico 130722180318-phpapp02Signolingustico 130722180318-phpapp02
Signolingustico 130722180318-phpapp02
Gabriel Henrique
 
Aula de matrizes
Aula de matrizesAula de matrizes
Aula de matrizes
Brumado
 
Balanced diet
Balanced dietBalanced diet
Balanced diet
Aiswarya Thomas
 
2 introdução a farmacologia aplicada ( pdf )
2  introdução a farmacologia aplicada  ( pdf )   2  introdução a farmacologia aplicada  ( pdf )
2 introdução a farmacologia aplicada ( pdf )
Marcelo Gomes
 
Reações ácido base
Reações ácido baseReações ácido base
Reações ácido base
Francisco Moura
 
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiroDangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
Tatyana Santos
 
Reações orgânicas reação de substituição
Reações orgânicas   reação de substituiçãoReações orgânicas   reação de substituição
Reações orgânicas reação de substituição
Rafael Nishikawa
 

Viewers also liked (20)

Sólidos platónicos
Sólidos platónicosSólidos platónicos
Sólidos platónicos
 
Bela negara
Bela negaraBela negara
Bela negara
 
Blogs, questionari
Blogs, questionariBlogs, questionari
Blogs, questionari
 
Gráfico diario del ibex 35 para el 16 12 2011
Gráfico diario del ibex 35 para el 16 12 2011Gráfico diario del ibex 35 para el 16 12 2011
Gráfico diario del ibex 35 para el 16 12 2011
 
Slide 3 As Smart Object 1
Slide 3 As Smart Object 1Slide 3 As Smart Object 1
Slide 3 As Smart Object 1
 
36
3636
36
 
How Sweet is the Evidence in Policy?
How Sweet is the Evidence in Policy?How Sweet is the Evidence in Policy?
How Sweet is the Evidence in Policy?
 
Substâncias
SubstânciasSubstâncias
Substâncias
 
Radiology finding new meaning in “meaningful use”
Radiology finding new meaning in “meaningful use”Radiology finding new meaning in “meaningful use”
Radiology finding new meaning in “meaningful use”
 
Cinemática vetorial
Cinemática vetorialCinemática vetorial
Cinemática vetorial
 
Boekaanbieding heilig verweer
Boekaanbieding heilig verweerBoekaanbieding heilig verweer
Boekaanbieding heilig verweer
 
Petróleo
PetróleoPetróleo
Petróleo
 
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leituraUnesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
Unesp treinamento para utilizacao_de_laboratorios_quimicos_e_biologicos_leitura
 
Signolingustico 130722180318-phpapp02
Signolingustico 130722180318-phpapp02Signolingustico 130722180318-phpapp02
Signolingustico 130722180318-phpapp02
 
Aula de matrizes
Aula de matrizesAula de matrizes
Aula de matrizes
 
Balanced diet
Balanced dietBalanced diet
Balanced diet
 
2 introdução a farmacologia aplicada ( pdf )
2  introdução a farmacologia aplicada  ( pdf )   2  introdução a farmacologia aplicada  ( pdf )
2 introdução a farmacologia aplicada ( pdf )
 
Reações ácido base
Reações ácido baseReações ácido base
Reações ácido base
 
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiroDangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
Dangelo fattini anatomia humana sistemica e segmentar 3 ed inteiro
 
Reações orgânicas reação de substituição
Reações orgânicas   reação de substituiçãoReações orgânicas   reação de substituição
Reações orgânicas reação de substituição
 

Similar to 20100314 virtualization igotti_lecture07

Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
Olexandra Dmytrenko
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5Technopark
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
Alexander Gornik
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objectscolriot
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
Nikita Lipsky
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
Zheka Kozlov
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
yaevents
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
Иван Кочуркин
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
Alexey Fyodorov
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
Evgenij Laktionov
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
Nikita Lipsky
 
Roslyn Code Analysis
Roslyn Code AnalysisRoslyn Code Analysis
Roslyn Code Analysis
Mikhail Shcherbakov
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
Nikita Lipsky
 

Similar to 20100314 virtualization igotti_lecture07 (20)

Bytecode
BytecodeBytecode
Bytecode
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Zagursky
ZagurskyZagursky
Zagursky
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
Roslyn Code Analysis
Roslyn Code AnalysisRoslyn Code Analysis
Roslyn Code Analysis
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 

More from Computer Science Club

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
Computer Science Club
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
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_bugs
Computer 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_bugs
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_bugs
Computer 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_lecture11
Computer 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
 

20100314 virtualization igotti_lecture07

  • 2. Функциональность верификатора • Требования к .class-файлу чѐтко описаны стандартом Java – верификатор проверяет это соответствие • Является важной частью системы безопасности • Предоставляет гарантии исполняющей компоненте • В общем случае верификатор должен решать NP-полную задачу • Реальные решения – компромисс • Доказывать или проверять? 2
  • 3. Фазы работы верификатора • Проверка формата классфайла (длина, magic, базовая структура) • Линковка класса (пул констант, иерархия наследования, использование final) • Линковка метода (верность инструкций байткода, обработка исключений, обработка jsr/ret, семантическая корректность) • Вызов метода или первое исполнение (наличие, сигнатурная совместимость, контроль доступа) 3
  • 4. Формат классфайла u4 MAGIC (== 0xCAFEBABE) u2 MINOR VERSION u2 MAJOR VERSION u2 constant_pool_count cp_info constant_pool[constant_pool_count-1] u2 access_flags u2 this_class u2 super_class u2 interfaces_count u2 interfaces[interfaces_count] u2 fields_count field_info fields[fields_count] u2 methods_count method_info methods[methods_count] u2 attributes_count attribute_info attributes[attributes_count] 4
  • 5. Пул констант u1 tag u1 info[ ] Тип Значение CONSTANT_Class 7 CONSTANT_Fieldref 9 CONSTANT_Methodref 10 CONSTANT_InterfaceMethodref 11 CONSTANT_String 8 CONSTANT_Integer 3 CONSTANT_Float 4 CONSTANT_Long 5 CONSTANT_Double 6 CONSTANT_NameAndType 12 CONSTANT_Utf8 1 5
  • 6. Описание метода • Доступ (маска ACC_PUBLIC , ACC_PRIVATE ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SYNCHRONIZED, ACC_NATIVE , ACC_ABSTRACT ACC_STRICT) • Сигнатура (параметры, возвращаемое значение) – строки Utf8, например [[IL • Список атрибутов (включая предопределѐнные: Code, ConstantValue, Exceptions, InnerClasses, Synthetic и т.п.) • Code содержит информацию о количестве локалов, необходимом стеке, обработчиках исключений, байткод метода (4 байта)) 6
  • 7. Семантические инварианты проверяемые верификатором • Корректность стековых операций (у Java нетипизированный стек) • Совместимость типов при записи в поля класса • Доступ к локалам (локалы тоже нетипизированные) • Использование методов в соответствии с сигнатурой (количество, тип) • Доступ к методам и полям других классов • Исполнение try/catch/finally блоков 7