Составители:
Рубрика:
xi
x
4.3. Верификация CIL-кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.3.1. Классификация применяемых на практике
алгоритмов верификации . . . . . . . . . . . . . . . . . . . . . . . 147
4.3.2. Особенности верификатора кода, используемого
в .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
4.3.3. Алгоритм верификации . . . . . . . . . . . . . . . . . . . . . . . . 149
4.4. Библиотеки для создания метаинструментов . . . . . . . . . . . . 152
4.4.1. Metadata Unmanaged API . . . . . . . . . . . . . . . . . . . . . . . 153
4.4.2. Reflection API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.4.3. Сравнение возможностей библиотек . . . . . . . . . . . . . 162
Глава 5. Динамическая генерация кода . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.1. Введение в динамическую генерацию кода . . . . . . . . . . . . . . 163
5.1.1. Обобщенный алгоритм интегрирования . . . . . . . . . . . 164
5.1.2. Представление выражений . . . . . . . . . . . . . . . . . . . . . . 165
5.1.3. Трансляция выражений в C# . . . . . . . . . . . . . . . . . . . . 166
5.1.4. Трансляция выражений в CIL . . . . . . . . . . . . . . . . . . . 168
5.1.5. Сравнение эффективности трех способов
вычисления выражений . . . . . . . . . . . . . . . . . . . . . . . . 169
5.2. Генерация линейных участков кода для стековой машины . 170
5.2.1. Генерация кода для выражений . . . . . . . . . . . . . . . . . . 170
5.2.2. Оптимизация линейных участков кода . . . . . . . . . . . . 173
5.3. Генерация развилок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.3.1. Генерация кода для логических выражений . . . . . . . . 175
5.3.2. Генерация кода для управляющих конструкций . . . . 178
5.3.3. Оптимизация кода, содержащего развилки . . . . . . . . 179
Глава 6. Основы многозадачности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1. Многозадачность в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1.1. Основные понятия . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1.2. Реализация в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.2. Общие подходы к реализации приложений с параллельным
выполнением операций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
6.2.1. Асинхронный ввод-вывод . . . . . . . . . . . . . . . . . . . . . . . 202
6.2.2. Асинхронные вызовы процедур . . . . . . . . . . . . . . . . . . 207
6.2.3. Процессы, потоки и объекты ядра . . . . . . . . . . . . . . . 207
6.2.4. Основы использования потоков и волокон . . . . . . . . 212
Глава 3. Common Intermediate Language . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1. Поток инструкций языка CIL . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.1. Формат потока инструкций . . . . . . . . . . . . . . . . . . . . . . 83
3.2. Язык CIL: инструкции общего назначения . . . . . . . . . . . 88
3.2.1. Инструкции для загрузки и сохранения значений . . . 88
3.2.2. Арифметические инструкции . . . . . . . . . . . . . . . . . . . . 91
3.2.3. Инструкции для организации передачи управления . 100
3.3. Язык CIL: инструкции для поддержки объектной модели . . 105
3.3.1. Инструкции для работы с объектами . . . . . . . . . . . . . 105
3.3.2. Инструкции для работы с массивами . . . . . . . . . . . . . 108
3.3.3. Инструкции для работы с типами-значениями . . . . . 111
3.3.4. Инструкции для работы с типизированными
ссылками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.4. Язык CIL: обработка исключений . . . . . . . . . . . . . . . . . . . . . 116
3.4.1. Предложения обработки исключений в заголовках
методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.4.2. Инструкции CIL для обработки исключений . . . . . . 119
3.4.3. Правила размещения областей . . . . . . . . . . . . . . . . . . 121
3.4.4. Ограничения на передачу управления . . . . . . . . . . . . 122
3.4.5. Семантика обработки исключений . . . . . . . . . . . . . . . 123
3.5. Синтаксис ILASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3.5.1. Основные элементы лексики . . . . . . . . . . . . . . . . . . . . 124
3.5.2. Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.5.3. Пример программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Глава 4. Анализ кода на CIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.1. Граф потока управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.1.1. Основные элементы графа потока управления . . . . . 133
4.1.2. Блоки обработки исключений в графе потока
управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.1.3. Дерево блоков в графе потока управления . . . . . . . . . 138
4.2. Преобразование линейной последовательности
инструкций в граф потока управления . . . . . . . . . . . . . . . . . . 140
4.2.1. Создание массива узлов . . . . . . . . . . . . . . . . . . . . . . . . 141
4.2.2. Создание дерева блоков . . . . . . . . . . . . . . . . . . . . . . . . 142
4.2.3. Присвоение родительских блоков узлам графа . . . . . 145
4.2.4. Формирование дуг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
x xi Глава 3. Common Intermediate Language . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.3. Верификация CIL-кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 3.1. Поток инструкций языка CIL . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.3.1. Классификация применяемых на практике 3.1.1. Формат потока инструкций . . . . . . . . . . . . . . . . . . . . . . 83 алгоритмов верификации . . . . . . . . . . . . . . . . . . . . . . . 147 3.2. Язык CIL: инструкции общего назначения . . . . . . . . . . . 88 4.3.2. Особенности верификатора кода, используемого в .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3.2.1. Инструкции для загрузки и сохранения значений . . . 88 4.3.3. Алгоритм верификации . . . . . . . . . . . . . . . . . . . . . . . . 149 3.2.2. Арифметические инструкции . . . . . . . . . . . . . . . . . . . . 91 4.4. Библиотеки для создания метаинструментов . . . . . . . . . . . . 152 3.2.3. Инструкции для организации передачи управления . 100 4.4.1. Metadata Unmanaged API . . . . . . . . . . . . . . . . . . . . . . . 153 3.3. Язык CIL: инструкции для поддержки объектной модели . . 105 4.4.2. Reflection API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 3.3.1. Инструкции для работы с объектами . . . . . . . . . . . . . 105 4.4.3. Сравнение возможностей библиотек . . . . . . . . . . . . . 162 3.3.2. Инструкции для работы с массивами . . . . . . . . . . . . . 108 Глава 5. Динамическая генерация кода . . . . . . . . . . . . . . . . . . . . . . . . . . 163 3.3.3. Инструкции для работы с типами-значениями . . . . . 111 5.1. Введение в динамическую генерацию кода . . . . . . . . . . . . . . 163 3.3.4. Инструкции для работы с типизированными ссылками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.1.1. Обобщенный алгоритм интегрирования . . . . . . . . . . . 164 3.4. Язык CIL: обработка исключений . . . . . . . . . . . . . . . . . . . . . 116 5.1.2. Представление выражений . . . . . . . . . . . . . . . . . . . . . . 165 3.4.1. Предложения обработки исключений в заголовках 5.1.3. Трансляция выражений в C# . . . . . . . . . . . . . . . . . . . . 166 методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.1.4. Трансляция выражений в CIL . . . . . . . . . . . . . . . . . . . 168 3.4.2. Инструкции CIL для обработки исключений . . . . . . 119 5.1.5. Сравнение эффективности трех способов 3.4.3. Правила размещения областей . . . . . . . . . . . . . . . . . . 121 вычисления выражений . . . . . . . . . . . . . . . . . . . . . . . . 169 3.4.4. Ограничения на передачу управления . . . . . . . . . . . . 122 5.2. Генерация линейных участков кода для стековой машины . 170 3.4.5. Семантика обработки исключений . . . . . . . . . . . . . . . 123 5.2.1. Генерация кода для выражений . . . . . . . . . . . . . . . . . . 170 3.5. Синтаксис ILASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.2.2. Оптимизация линейных участков кода . . . . . . . . . . . . 173 3.5.1. Основные элементы лексики . . . . . . . . . . . . . . . . . . . . 124 5.3. Генерация развилок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 3.5.2. Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.3.1. Генерация кода для логических выражений . . . . . . . . 175 3.5.3. Пример программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.3.2. Генерация кода для управляющих конструкций . . . . 178 Глава 4. Анализ кода на CIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.3.3. Оптимизация кода, содержащего развилки . . . . . . . . 179 4.1. Граф потока управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Глава 6. Основы многозадачности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.1.1. Основные элементы графа потока управления . . . . . 133 6.1. Многозадачность в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.1.2. Блоки обработки исключений в графе потока 6.1.1. Основные понятия . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6.1.2. Реализация в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 194 4.1.3. Дерево блоков в графе потока управления . . . . . . . . . 138 6.2. Общие подходы к реализации приложений с параллельным 4.2. Преобразование линейной последовательности выполнением операций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 инструкций в граф потока управления . . . . . . . . . . . . . . . . . . 140 6.2.1. Асинхронный ввод-вывод . . . . . . . . . . . . . . . . . . . . . . . 202 4.2.1. Создание массива узлов . . . . . . . . . . . . . . . . . . . . . . . . 141 6.2.2. Асинхронные вызовы процедур . . . . . . . . . . . . . . . . . . 207 4.2.2. Создание дерева блоков . . . . . . . . . . . . . . . . . . . . . . . . 142 6.2.3. Процессы, потоки и объекты ядра . . . . . . . . . . . . . . . 207 4.2.3. Присвоение родительских блоков узлам графа . . . . . 145 6.2.4. Основы использования потоков и волокон . . . . . . . . 212 4.2.4. Формирование дуг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »