что такое microsoft intermediate language msil

Microsoft Intermediate Language

Microsoft Intermediate Language

Язык MSIL также нередко называют просто IL (англ. Intermediate Language ), то есть просто «промежуточный язык».

Синтаксис и мнемоника языка MSIL описываются спецификацией CIL (англ. Common Intermediate Language ) — открытой спецификацией общего промежуточного языка. Спецификация CIL является составной частью более общей спецификации CLI (англ. Common Language Infrastructure ).

Полезное

Смотреть что такое «Microsoft Intermediate Language» в других словарях:

Microsoft Intermediate Language — Common Intermediate Language (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist… … Deutsch Wikipedia

Intermediate language — Common Intermediate Language (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist… … Deutsch Wikipedia

Intermediate language — In computer science, an intermediate language is the language of an abstract machine designed to aid in the analysis of computer programs. The term comes from their use in compilers, where a compiler first translates the source code of a program… … Wikipedia

Common Intermediate Language — (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist vollständig stackbasiert. Auf dem… … Deutsch Wikipedia

Microsoft Visual Studio — Visual Studio 2010 SP1 editing a WPF application Developer(s) … Wikipedia

Источник

Реверс-инжиниринг NET-приложений. Часть четвертая: Введение в циклическую разработку

После изучения основ реверс-инжиниринга NET-приложений, настало время более подробно рассмотреть язык MSIL. В этой статье не ставится цель научиться вас программировать на этом языке.

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Автор: Суфиан Тахири (Soufiane Tahiri)

После изучения основ реверс-инжиниринга NET-приложений, настало время более подробно рассмотреть язык MSIL. В этой статье не ставится цель научиться вас программировать на этом языке. Я постараюсь разъяснить новые нюансы по использованию и управлению IL-кодом посредством новых инструментов. Также я представлю вам технику «циклической разработки» (которая применяется не только при разработке NET-приложений) и расскажу о преимуществах, которые может дать эта техника реверс-инженеру.

В этой статье мы ознакомимся более подробно с IL-кодом и двумя взаимосвязанными инструментами, которые помогут нам удалить первую защиту у Crack Me, специально сделанного для этой цели. Как только вы научитесь работать с этими инструментами и узнаете основы циклической разработки, в следующей статье я расскажу о продвинутых методах циклической разработки для удаления второй защиты Crack Me. Так что сделайте глубокий вдох, и мы начинаем!

Понятие «Циклической разработки»

Первоначально IL-ассемблер и дизассемблер были созданы как внутренние инструменты, используемые при разработке среды CLR. Когда обе утилиты стали в достаточной мере синхронизированными, на базе ILAsm начали появляться (наряду с библиотекой классов NET Frameworks) сторонние компиляторы, ориентированные на платформу NET.

Замечание: Управляемые NET-приложения называются «сборками», а управляемые исполняемые файлы NET называются «модулями».

В этой статье мы будем работать только с двумя инструментами, официально представленными компанией Microsoft в рамках Windows SDK: IL-ассемблер (ILASM) и IL-дизассемблер (ILDASM, который мы использовали в прошлой статье). В принципе, мы можем исследовать любую NET-сборку / модуль при помощи этих двух утилит.

ILDASM можно найти в папке C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin. ILASM находится в папке C:\WINDOWS\Microsoft.NET\Framework\vx.x (в зависимости от версии платформы, которая используется для создания сборки, которую мы хотим изменить).

Прежде чем приступить к анализу Crack ME (о нем я еще не рассказывал), я подробнее остановлюсь на некоторых аспектах платформы NET и начну со среды Common Language Runtime.

Среда CLR является промежуточным звеном между NET-сборками и операционной системой, в которой запускаются сборки; на данный момент (я надеюсь) вы знаете, что каждая NET-сборка «транслируется» в низкоуровневый промежуточный язык (Common Intermediate Language – CIL или Microsoft Intermediate Language – MSIL). Несмотря на разработку на высокоуровневом языке, сборка независима от целевой платформы. Такой вид «абстракции» позволяет вести разработку на разных языках.

Common Intermediate Language опирается на набор спецификаций, гарантирующих совместное сосуществование разных языков; этот набор спецификаций известен как Common Language Specifications – CLS, как это определено в спецификации общеязыковой структуры (Common Language Infrastructure), стандарте Ecma International, и международной организации по стандартизации (International Organization for Standardization – ISO; ссылку для загрузки Раздела I можно найти в разделе «Ссылки»).

NET-сборки и модули, спроектированные для запуска в среде Common Language Runtime (CLR), состоят в основном из метаданных и управляемого кода.

Управляемый код состоит из набора инструкций, которые являются «сердцем» сборки / модуля и представляет собой набор функций и методов закодированный в абстрактной и стандартизированной форме известной как MSIL (или CIL), что позволяет опознать управляемый исходный код, который запускается исключительно в среде CLR.

С другой стороны, термин «метаданные» является довольно неоднозначным (метаданные можно еще назвать как «данные, описывающие данные»). В нашем случае метаданные – это система дескрипторов, касающихся «содержимого» сборки. Метаданные относятся к структуре данных, находящихся внутри низкоуровневого CIL-кода, и описывают структуру высокоуровневого кода: отношения между классами, их членами, возвращаемыми типами, глобальными элементами и параметрами методов. Если обобщить все вышесказанное (всегда учитывайте контекст среды CLR), метаданные описывают все элементы, которые задекларированы (или на которые есть ссылка) внутри модуля.

Таким образом, можно сказать, что модуль состоит из двух компонентов: метаданных и IL-кода; среда CLR подразделяется на две подсистемы: «загрузчик» и JIT-компилятор.

Загрузчик разбирает метаданные и создает в памяти нечто вроде схемы / паттерна представления внутренней структуры модуля, а затем в зависимости от результата предыдущей операции, JIT-компилятор (также называемый jitter) компилирует IL-код в машинный код конкретной платформы.

Рисунок ниже описывает механизм создания и запуска управляемого модуля:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Наш третий объект исследования – управляемый модуль «CrackMe3-InfoSecInstitute-dotNET-Reversing.exe» (ссылка для загрузки представлена в разделе «Ссылки) выглядит так:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msilчто такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Наша задача – удалить всплывающее окно и подобрать серийный номер. Далее мы рассмотрим методы циклической разработки для обхода обеих защит этого Crack Me.

Шаг 1: Дизассемблирование

Первым делом дизассемблируем наш Crack Me, используя ILDASM и посмотрим встроенный IL-код управляемого модуля. Сосредоточим внимание на двух узлах:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Управляемый модуль содержит одну форму Form1 и один класс GetSerial. Рассмотрим первый узел (с формой):

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Дважды щелкните по методу Form_Load, чтобы увидеть IL-код:

.method private instance void Form1_Load(object sender, class [mscorlib]System.EventArgs e) cil managed
<
// Code size 19 (0×13)
.maxstack 8
IL_0000: ldstr “I’m a nag screen, remove me.”
IL_0005: ldc.i4.s 16
IL_0007: ldstr “Nagging you!”
IL_000c: call valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxResult [Microsoft.VisualBasic]Microsoft.VisualBasic.Interaction::MsgBox(object, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxStyle, object)
IL_0011: pop
IL_0012: ret
> // end of method Form1::Form1_Load

Для повышения читабельности кода все служебные слова ILAsm (читай инструкции) выделены жирным шрифтом. Рассмотрим детально механизм работы этого участка кода и наши дальнейшие действия.

Понимание механизма работы метода Form_Load():

.method private instance void Form1_Load(…) cil managed элемент метаданных Method Definition.

Служебные слова private и instance определяют флаги элемента Method Definition. Ключевое слово public означает, что метод Frm1_Load() доступен всем членам, для которых видим «материнский» класс (тот, который содержит этот метод). Служебное слово instance говорит нам о том, что метод связан с объектом, а не классом.

Служебное слово void в явной форме определяет тип возвращаемого значения (по умолчанию) текущего метода. Void означает, что метод ничего не возвращает.

Служебные слова cil и managed означают, что тело метода представлено IL-кодом и определяют флаги реализации Method Definition.

.maxstack 8 – директива, определяющая максимальное число элементов, которое может находиться в стеке вычислений во время выполнения метода.

IL_0000 – метка, не занимающая места в памяти. ILDASM помечает каждую строку (инструкцию) подобными метками. Метки не компилируются и используются исключительно для идентификации некоторых смещений внутри IL-кода во время компиляции программы.

Как вы знаете, IL является строго стековым языком. Все должно проходить через стек вычислений. Каждая инструкция помещает или извлекает что-то (или ничего) из вершины стека вычислений. Когда мы говорим о помещении / извлечении элементов в / из стека, мы говорим об элементах, не обращая внимание на их размеры.

Ldstr «I’m a nag screen, remove me». Создает объект типа строка из передаваемой строковой константы и помещает ссылку на этот объект в стек вычислений. Подобные константы хранятся в метаданных. Эта строковая константа общеязыковой среды выполнения или строковая константа метаданных всегда хранится в формате Unicode (UTF-16).

Ldc.i4.s 16 короткая форма (так как оканчивается на «.s») инструкции, которая загружает целое число 16 типа int32 в стек вычисления (в данном случае происходит загрузка стиля окна сообщения с иконкой о критической ошибке).

call valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxResult [Microsoft.VisualBasic]Microsoft.VisualBasic.Interaction::MsgBox(object, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxStyle, object); valuetype используется перед объектом, который мы хотим создать. Указывается полное имя класса, включая имя библиотеки, так происходит вызов (не виртуального?) метода. Ключевое слово valuetype обязательно для экземпляров общего типа, поскольку они представлены в метаданных как TypeSpecs.

Инструкция pop удаляет из стека строку «Nagging you!».

После выполнения инструкции ret происходит возврат из текущего метода, и в стек вычислений помещается значение определенного типа. В нашем случае метод возвращает значение типа void, что означает отсутствие какого-либо значения в стеке вычисления во время возврата из метода.

Теперь мы знаем, что метод Form1_Load делает одну единственную вещь: инициализирует и выводит всплывающее окно, от которого нам нужно избавиться.

Информацию о версии можно узнать, если посмотреть содержимое манифеста сборки:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Директива .ver указывает номер версии:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Рисунок 1. Версия сборки

Теперь выгрузим сборку. Выполните команду File->Dump->Ok (или Ctrl+D) и выберите директорию, куда сохранять файлы. В результате получится нечто подобное:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Файл с расширением .il содержит все IL-инструкции управляемого модуля. Откройте его в текстовом редакторе и найдите метод Form1_Load:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Теперь мы можем пойти несколькими путями. Например, удалить все инструкции внутри метода или удалить весь метод, поставив в начало инструкцию ret. Я предпочитаю удалить содержимое так, чтобы метод Form1_Load() не выполнял вообще никаких операций.

Удалите строки с 1192 до 1201 и сохраните изменения:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

После всех манипуляций нам нужно реассемблировать измененный .il файл. Мы будем использовать утилиту ILAsm, которая поставляется вместе с Visual Studio и Windows SDK. С помощью ILAsm мы сможем собрать исполняемый файл из файла инструкций на языке Microsoft Intermediate Language.

Шаг 2: Реассемблирование

Переходим в командную строку Microsoft Windows Command (CMD) или Visual Studio Command Prompt (в любом случае результат будет один и тот же).

Выполните команду Start->Run->CMD.

CD C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
ilasm filename.il –res=filename.res

Параметр –res необязательный и используется для сохранения ресурсов из первоначальной сборки (например, иконок)

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Если процесс компиляции прошел успешно, вы увидите следующее сообщение:

И в новой версии уже не будет всплывающего окна:

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Замечание: вы также можете изменить текст, появляющийся во всплывающем окне посредством изменения строки, которая загружается в стек вычисления, или поменять стиль всплывающего окна:

Источник

Что такое microsoft intermediate language msil

Дата публикации статьи: 17.07.2006 17:03

Разъяснение промежуточного языка Microsoft (Microsoft Intermediate Language). Часть 1 – Введение


Простейшая программа, написанная на IL

Мы начнем наше путешествие с классического примера Hello World, но с небольшим завихрением. Откройте свой любимый текстовый редактор, создайте новый текстовый файл и назовите его HelloWorld.il и вставьте в него следующие строки кода:

Давайте скомпилируем нашу программу с помощью следующей команды:

Во время ее выполнения генерируется следующая ошибка, которая показана на рисунке 1.

Это сообщение об ошибке вполне информативно. Оно говорит нам, что исходный файл имеет тип ANSI, но об этом позже. Также оно дает нам предупреждающее сообщение:

И это возбуждает одну ошибку:

Один IL-файл может содержать много функций и ассемблер не имеет способа определить, какую из них нужно выполнить первой. В обычных языках, таких как C#, или VB, функция, которая должна быть выполнена первой, должна иметь определенное название, например в C# входом в процедуру является функция Main. Об этом и жалуется ассемблер. В IL первая функция, которая должна быть выполнена, называется функцией entrypoint.
Чтобы сказать ассемблеру, что функция HelloWorld является функцией entrypoint, нам нужна директива. И вот, директива – это ничто иное, как entrypoint. Добавьте эту директиву в наш код, как показано в листинге ниже. Между прочим, ассемблер не требует, чтобы эта директива была первым оператором в функции. Функция просто должна иметь эту директиву определенной где-нибудь в функции, в начале, середине или в конце, не имеет значения, где именно, следовательно, оба листинга кода, приведенные ниже, производят один и тот же эффект. Однако в одной сборке только одна функция может иметь эту директиву. Если более чем одна функция имеет эту директиву, программа никогда не будет скомпилирована.

На этот раз программа компилируется в файл HelloWorld.exe без единой ошибки. Однако, если мы попытаемся запустить эту программу, нас поприветствует сообщение об ошибке, показанное на рисунке 2:

Следовательно, наш обновленный код будет выглядеть так:

Эта программа запустится и откомпилируется без ошибок. Заметьте, я добавил ключевое слово «static» в директиве «method» чтобы предупредить сообщение, вызванное ассемблером в первый раз. Статические методы принадлежат классу. Помните, в C# мы используем определенную функцию Main как public static void Main(). Следовательно, любая функция, у которой есть директива entrypoint, должна быть декорирована атрибутом static.
Вау, мы создали наше первое приложение, которое ничего не производит, но не унывайте, мы поняли основы программы в IL. Мы будем основываться на этой структуре.
Затем нам нужно будет найти способ вызвать функцию, определенную в другой сборке. Используя ее, мы сможем вызвать знаменитую функцию WriteLine, чтобы получить на выходе в консоли нашу строку «HelloWorld». Догадайтесь, это будет директива или инструкция для ассемблера?
Да, вы правы, это будет инструкция. Чтобы найти ее, мы посмотрим в нашем мешке инструкций IL, и инструкция, предназначенная именно для этого, называется call. Формат этой функции:

Когда он вызывает функцию, между IL и другими языками программирования обнаруживается существенное различие. В IL, когда мы вызываем функцию, мы должны полностью определить функцию, включая ее пространство имен, возвращаемый тип и тип данных ее параметра. Это гарантирует, что ассемблер сможет установить подлинность функции.
Теперь код выглядит так:

Эта программа компилируется без ошибок, однако, она возбуждает исключение, если мы выполняем ее, как показано на рисунке 3:

Причиной, вызывающей это исключение, является упущение значения ожидаемого параметра. Программа ожидает строковый параметр, чтобы использовать его в вызываемой функции. Сейчас мы увидим, как передать параметр в функцию.
Все параметры передаются и помещаются в стек функции. IL имеет инструкцию, которая называется ldstr, являющуюся сокращением от «Load String». Эта инструкция загружает строку в стек. Стек – это область памяти, которая упрощает передачу параметров в функцию, мы поговорим об этом в следующих главах. Все функции получают свои параметры из стека. Следовательно, инструкции подобные ldstr обязательны. Формат этой инструкции:

После использования этой инструкции листинг нашего обновленного кода выглядит так:

Эта программа компилируется и вырабатывает хорошо известный «Hello World».

Видите, IL-программирование совсем не трудное. Вы написали свою первую программу, которая приветствует вас. Вы также узнали о структуре IL-программы и узнали некоторые директивы и инструкции. Если вы сами выполнили эти примеры, вы должны были заметить, что IL – регистрозависимый язык. В следующем разделе мы усовершенствуем это приложение. Нет, мы не будем усовершенствовать его функции, но декорируем его некоторыми атрибутами. Эти атрибуты придадут нашему приложению вид, который эквивалентен продукту великой утилиты ILDasm.exe. Я объясню это позже.

Усовершенствование примера HelloWorld

За директивой class следует название класса, которое опционально в IL. Мне также нужно декорировать эту директиву некоторыми атрибутами, которые определят ее доступность, размещение и опции взаимодействия. Таким образом, мой обновленный код выглядит так:

Я использовал такие три атрибута:

auto: Это означает, что размещение класса в памяти будет разрешено только временем исполнения, а не нашей программой.

В следующих статьях, я представлю вам набор IL-инструкций, расскажу, как IL используется для выполнения базовых операций, таких как Выбор, Итерация, перегрузка и т.д. Мы также увидим, как создавать ссылки и типы значений. Определим методы, свойства и индексаторы. Я покажу вам основы обработки исключений и создание специальных классов, таких как делегаты, и определять пользовательские события. Я завершу этот цикл полнофункциональным GUI-приложением, написанным на IL.

Источник

Общий промежуточный язык

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

СОДЕРЖАНИЕ

Общая информация [ править ]

Процесс выполнения выглядит так:

Инструкции [ править ]

Байт-код CIL содержит инструкции для следующих групп задач:

Вычислительная модель [ править ]

В последнем примере значения двух регистров, eax и edx, сначала помещаются в стек. Когда вызывается инструкция добавления, операнды «выталкиваются» или извлекаются, а результат «помещается» или сохраняется в стеке. Полученное значение затем извлекается из стека и сохраняется в eax.

Объектно-ориентированные концепции [ править ]

CIL разработан как объектно-ориентированный. Вы можете создавать объекты, вызывать методы и использовать другие типы членов, например поля.

Каждый метод должен (за некоторыми исключениями) находиться в классе. Так делает этот статический метод:

Метод Add не требует объявления какого-либо экземпляра Foo, потому что он объявлен как статический, и затем его можно использовать в C # следующим образом:

В CIL это будет выглядеть так:

Классы экземпляров [ править ]

Создание объектов [ править ]

В C # экземпляры классов создаются так:

И эти инструкции примерно такие же, как эти инструкции в CIL:

Вызов методов экземпляра [ править ]

Методы экземпляра вызываются в C # как следующие:

Как вызывается в CIL:

Метаданные [ править ]

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

Пример [ править ]

Ниже представлена ​​базовая программа Hello, World, написанная на CIL. Будет отображена строка «Hello, world!».

Следующий код более сложен по количеству кодов операций.

В синтаксисе CIL это выглядит так:

Это просто представление того, как CIL выглядит на уровне виртуальной машины (ВМ). При компиляции методы сохраняются в таблицах, а инструкции хранятся в байтах внутри сборки, которая является переносимым исполняемым файлом (PE).

Поколение [ править ]

Сборка и инструкции CIL генерируются либо компилятором, либо утилитой, называемой IL Assembler ( ILAsm ), которая поставляется со средой выполнения.

Казнь [ править ]

Своевременная компиляция [ править ]

Своевременная компиляция (JIT) включает в себя превращение байтового кода в код, который немедленно исполняется ЦП. Преобразование выполняется постепенно во время выполнения программы. JIT-компиляция обеспечивает оптимизацию для конкретной среды, безопасность типов во время выполнения и проверку сборки. Для этого JIT-компилятор проверяет метаданные сборки на предмет любых незаконных обращений и соответствующим образом обрабатывает нарушения.

Опережающая компиляция [ править ]

Совместимые с CLI среды выполнения также имеют возможность выполнять предварительную компиляцию (AOT) сборки, чтобы ускорить ее выполнение за счет удаления процесса JIT во время выполнения.

Заметное отличие от байт-кода Java состоит в том, что CIL поставляется с ldind, stind, ldloca и множеством инструкций вызова, которых достаточно для манипулирования указателями данных / функций, необходимых для компиляции кода C / C ++ в CIL.

Соответствующий код в CIL можно представить следующим образом:

Источник

BestProg

Содержание

Поиск на других ресурсах:

.NET Framework служит средой для поддержки, разработки и выполнения распределенных приложений, которые базируются на компонентах (элементах управления).

Приложения (программы) можно разрабатывать на разных языках программирования, которые поддерживают эту технологию.

.NET Framework обеспечивает:

Библиотека базовых классов включает в себя определение разнообразных примитивов, которыми могут быть: потоки, графические API-интерфейсы, реализация баз данных, файловый ввод-вывод и прочее.

3. Какой принцип действия общеязыковой среды выполнения CLR ( Common Language Runtime )?

Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msilРис. 1. Процесс преобразования исходного кода в код на языке MSIL ( CIL или IL ) и создание файла сборки ( *.dll или *.exe )

Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).

Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле ( *.dll или *.exe ) с помощью считывания метаданных этого файла.

После этого CLR размещает в памяти считанный из сборки тип.

Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.

Последним происходит выполнение запрашиваемого программного кода.

4. Что такое промежуточный язык MSIL ( Microsoft Intermediate Language ) или CIL ( Common Intermediate Language )?

MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:

Фактически, MSIL – это язык переносного ассемблера

Сборка предназначена для сохранения пространств имен ( namespaces ). Пространства имен содержат типы. Типами могут быть классы, делегаты, интерфейсы, перечисления, структуры.

Сборка может содержать любое количество пространств имен. Любое пространство имен может содержать любое количество типов (классов, интерфейсов, структур, перечислений, делегатов).

6. Что размещается в сборках?
7. Что такое манифест ( manifest )?

Манифест – это описание самой сборки с помощью метаданных.

В манифесте размещается информация:

Если в исходном коде используются библиотеки базовых классов (например из сборки mscorlib.dll ), то они загружаются с помощью загрузчика классов.

После этого приложение выполняется.

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

9. Какие существуют виды сборок?

Существует два вида сборок:

В многофайловой сборке один из модулей есть главным ( primary ).

10. В каком файле размещается главная сборка библиотеки MS Visual Studio?

Главная сборка размещается в файле “ mscorlib.dll ”.

Типами могут быть классы, интерфейсы, структуры, перечисления, делегаты.

12. Какое назначение общеязыковой спецификации CLS?
14. Что такое пространство имен ( namespace )?

Пространство имен предназначено для объединения группы типов, которые связаны между собою с семантической точки зрения. Типы размещаются в сборках ( assembly ). Под типами понимаются классы, делегаты, интерфейсы, структуры, перечисления.

Примеры названий пространств имен:

Например, в пространстве имен System.Data размещаются основные типы для работы с базами данных, в пространстве имен System.Collections размещаются основные типы для работы с коллекциями.

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Рис. 3. Вызов утилиты Object Browser

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Рис. 4. Окно Object Browser с выделенной сборкой mscorlib.dll

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Рис. 5. Сборка mscorlib и список пространств имен, которые входят в нее

Аналогично раскрывается любое из пространств имен. В пространствах имен описываются типы. В типах описываются методы, свойства, константы и т.п.

что такое microsoft intermediate language msil. Смотреть фото что такое microsoft intermediate language msil. Смотреть картинку что такое microsoft intermediate language msil. Картинка про что такое microsoft intermediate language msil. Фото что такое microsoft intermediate language msil

Рис. 6. Содержимое класса BinaryReader

Примеры подключения пространств имен:

После подключения пространства имен можно обращаться к типам, которые в них реализованы.

Программирование: теория и практика

Рубрики

Свежие записи

При использовании материалов сайта, ссылка на сайт обязательна.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *