Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Обзор существующих библиотек для создания .Net метаинструментов

Читайте также:
  1. I.1. Аргументация создания вариативных стандартов образования обучающихся с нарушениями речи.
  2. II. 1 Монографическая или обзорная?
  3. III. Попытки создания общей теории социальной системы
  4. III.2.1. Как работать в библиотеке
  5. III.2.4. Опыт поиска в городской библиотеке
  6. ILL Монографическая или обзорная?
  7. Package: модуль библиотеки
  8. RAID массивы. История создания RAID массивов. Основные преимущества и недостатки RAID массивов всех уровней. Принципы работы.
  9. XV. Обзор политических преобразований
  10. Анализ существующих разработок

 

Мы будем называть метаинструментами программы, для которых другие программы выступают в роли данных. Метаинструменты используются для разработки, тестирования, анализа и преобразования программ. Это могут быть компиляторы, средства быстрой разработки приложений (RAD), оптимизаторы, отладчики. Метаинструменты для платформы.NET – это программы, рассматривающие сборки.NET в качестве объектов анализа, генерации или преобразования[12].

Сборка.NET представляет собой совокупность метаданных, CIL-кода и, возможно, ресурсов. Поэтому библиотеки, необходимые для создания метаинструментов, должны обеспечивать чтение и генерацию этой информации. В составе.NET Framework SDK поставляются две библиотеки, частично решающие эти задачи. Это Metadata Unmanaged API и библиотека рефлексии (Reflection API). Кроме того, существуют созданные сторонними разработчиками библиотеки AbstractIL и Mono.Cecil. AbstractIL. В данном разделе проведем обзор этих библиотек.

Metadata Unmanaged API осуществляет импорт и генерацию метаданных. Оно предназначено, главным образом, для использования в компиляторах и загрузчиках, которым требуется высокая скорость доступа к метаданным и работа с метаданными на низком уровне.

При использовании Metadata Unmanaged API метаинструмент работает с образом сборки в памяти (в документации такой образ называется scope). Метаинструмент может создать образ новой сборки или загрузить существующую сборку из файла, а кроме того, может сохранить образ сборки в файл. Навигация через иерархию метаданных осуществляется на достаточно низком уровне с использованием токенов метаданных (токен некоторого элемента метаданных – это тридцати двух разрядное число, старший байт которого обозначает таблицу, в которой хранятся элементы метаданных соответствующего типа, а остальные три байта являются индексом элемента в этой таблице). Metadata Unmanaged API предоставляет прямой доступ к таблицам метаданных, позволяет сливать несколько сборок в одну, но не содержит явных средств для работы с CIL-кодом [2].

Кроме того, метаинструмент, использующий это API, должен быть написан на C++.

Reflection API - библиотека рефлексии – процессов обнаружения типов во время выполнения программы. С применением служб рефлексии те же самые метаданные, которые отображает утилита ildasm.exe, можно получать программно в виде удобной объектной модели [10]. Эта библиотека содержит классы для работы с метаданными на высоком уровне. Она соответствует спецификации CLS, поэтому использующий ее метаинструмент может быть написан на любом языке платформы.NET, который является потребителем CLS-библиотек.

Библиотека рефлексии спроектирована таким образом, что создание объектов рефлексии, соответствующих элементам метаданных, осуществляется путем вызова методов других объектов [13].

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

Кроме чтения метаданных, библиотека рефлексии позволяет создавать экземпляры типов, входящих в обрабатываемую сборку, вызывать методы этих типов, читать и изменять значения полей. Для генерации метаданных в библиотеке рефлексии предназначены классы пространства имен System.Reflection.Emit.

В отличие от Metadata Unmanaged API, библиотека рефлексии содержит средства для генерации CIL-кода. Для этого предназначен класс ILGenerator. Он позволяет после создания объекта MethodBuilder (или ConstructorBuilder) сгенерировать для соответствующего метода (или конструктора) поток инструкций.

Однако библиотеки, необходимые для создания метаинструментов, должны обеспечивать чтение и генерацию этой информации. На сегодняшний день существует несколько библиотек предоставляющих подобную функциональность, например, AbstractIL и Mono.Cecil. AbstractIL – библиотека реализованная Microsoft Research, предоставляет богатые возможности по манипулированию CIL кодом. Одним из недостатков данной библиотеки является то, что она реализована на F# – функциональном языке программирования. Использование такой библиотеки из императивных языков программирования затруднено. Mono.Cecil – библиотека с открытым исходным кодом, реализованная в рамках проекта Mono. В отличие от AbstractIL, она обладает простотой и удобством, а открытость исходного кода позволяет модифицировать ее для собственных нужд.

Сравненим возможности перечисленных библиотек. Из Таблицы 1.1 следует, что ни одна из библиотек, поставляемых вместе с.NET Framework, не позволяет читать CIL-код, хотя эта возможность требуется целому ряду метаинструментов (например, верификаторам и оптимизаторам кода).

Таблица 1.1 – CIL и системное программирование в Microsoft.NET

Функции\Название Metadata Unmanaged Reflection AbstractIL Mono.Cecil
Чтение метаданных + + + +
Генерация метаданных + + + +
Чтение CIL-кода - - + +
Генерация CIL-кода - + + +

 

Из таблицы следует, что ни Metadata Unmanaged, ни Reflection, поставляемых вместе с.NET Framework, не позволяет читать CIL-код, хотя эта возможность требуется целому ряду метаинструментов (например, верификаторам и оптимизаторам кода). Поэтому выбор, какую библиотеку использовать остаётся между AbstractIL и Mono.Celic. Как было сказано выше Mono.Celic распространяется с открытым исходным кодом и имеется возможность подстроить её под свои нужды, потому выбрана она для использования в разработке.

А теперь, рассмотрев общие сведения о платформе.NET и основные инструкции языка CIL, а также библиотеки для создания метаинструментов, перейдем к описанию приемов, способов и алгоритмов «запутывания» программного обеспечения на уровне байт-кода технологии.NET.

 




Дата добавления: 2015-09-10; просмотров: 142 | Поможем написать вашу работу | Нарушение авторских прав

РЕФЕРАТ | Понятие обфускации. Математическая модель процесса обфускации | Обфускация констант. | Определение трудозатрат и построение календарного графика выполнения работ | Расчет затрат на разработку программы и определение экономической эффективности от внедрения программы | Анализ условий труда специалиста на рабочем месте. | Определение класса условий труда | Разработка мероприятий по улучшению условий труда | СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ | Приложение Б. Примеры упражнений для расслаблений отдельных групп мышц |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав