Преобразование программы в машинные коды

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

Создание собственных двоичных файлов

Приложение, предназначенное для платформа .NET Framework и которое не компилируется с помощью цепочки инструментов .NET Native, состоит из сборки приложения, которая включает в себя следующее:

Преобразование программ в машинный код с LLVM

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

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

  • Все дополнительные библиотеки классов и сборки сторонних производителей, необходимые приложению. Эти сборки точно так же включают метаданные, описывающие сборку, ее типы и члены, а также IL-код, который реализует все члены типов.
  • Библиотека классов .NET Framework. Это коллекция сборок, устанавливаемая на локальном компьютере при установке платформы .NET Framework. Сборки, включенные в библиотеку классов .NET Framework, содержат полный набор метаданных и кода реализации.
  • Среда CLR. Это коллекция библиотек DLL, которые выполняют такие операции, как загрузка сборок, управление памятью, сбор мусора, обработка исключений, JIT-компиляция, удаленное и локальное взаимодействие. Как и библиотека классов, среда выполнения устанавливается на локальном компьютере в процессе установки .NET Framework.

Обратите внимание, для успешного выполнения приложения должны присутствовать: вся среда CLR, метаданные, IL-код для всех типов в сборках, специфичных для приложения, сторонние сборки и системные сборки.

JIT-компиляция

Входные данные для цепочки инструментов .NET Native — это приложение UWP, созданное компилятором C# или Visual Basic. Другими словами, цепочка инструментов .NET Native начинает выполнение, когда компилятор языка завершит компиляцию приложения UWP.

Так как входные данные .NET Native — промежуточный язык (IL) и метаданные, записанные в сборки управляемого кода, то вы по-прежнему можете выполнять создание собственного кода или другие пользовательские операции посредством событий «перед сборкой» и «после сборки» или путем изменения файла проекта MSBuild.

Чем машинный код отличается от ассемблера

Однако не поддерживаются инструменты, изменяющие IL-код и тем самым препятствующие анализу приложения IL цепочкой инструментов .NET. Средства запутывания являются наиболее важными средствами этого типа.

Во время преобразования приложения из промежуточного языка в машинный код цепочка инструментов .NET Native выполняет следующие операции:

  • Для некоторых ветвей кода заменяется код, основанный на отражении и метаданных, на статический машинный код. Например, если тип значения не переопределяет метод ValueType.Equals, то стандартный тест на эквивалентность использует отражение для получения объектов FieldInfo, представляющих поля этого типа значения, а затем сравнивает значения полей двух экземпляров. При компиляции в машинный код цепочка инструментов .NET Native заменяет код отражения и метаданные на статическое сравнение значений полей.
  • Везде, где возможно, делается попытка исключить все метаданные.
  • .NET Native включает в заключительные сборки приложения только тот код реализации, который фактически вызывается приложением. Особенно это касается кода сторонних библиотек и кода в библиотеке классов .NET Framework. В результате приложение больше не зависит от сторонних библиотек или всей библиотеки классов .NET Framework; вместо этого код сторонних библиотек и библиотек классов .NET Framework теперь является локальным для приложения.
  • .NET Native заменяет полную среду CLR на оптимизированную среды выполнения, которая в первую очередь содержит сборщика мусора. Оптимизированная среда выполнения находится в библиотеке mrt100_app.dll, которая является локальной для приложения и имеет размер только несколько сотен килобайт. Это возможно потому, что статическое связывание устраняет необходимость во многих операциях, реализуемых средой CLR.
Читайте также:
Как запросить разрешение системы на удаление программы

Примечание .NET Native использует тот же сборщик мусора, что и стандартная среда CLR. В сборщике мусора .NET Native фоновая сборка мусора включена по умолчанию. Дополнительные сведения о сборке мусора см. в разделе Основы сборки мусора.

.NET Native компилирует все приложение в приложение машинного кода. .NET Native не позволяет компилировать одну сборку, которая содержит библиотеку классов, в машинный код, для того чтобы его можно было вызывать напрямую из управляемого кода.

Итоговое приложение, созданное цепочкой инструментов .NET Native, записывается в каталог ilc.out в каталоге отладки или выпуска каталога проекта. Итоговое приложение состоит из следующих файлов:

  • .exe — исполняемый файл заглушки, который просто передает управление специальному Main экспорту в .dll.
  • .dll , библиотека динамической компоновки Windows, содержащая весь код приложения, а также код из библиотеки классов платформа .NET Framework и любых сторонних библиотек, от которых у вас есть зависимость. Итоговое приложение также содержит код поддержки, например код, необходимый для взаимодействия с Windows и сериализации объектов в приложении.
  • mrt100_app.dll — оптимизированная среда выполнения, которая предоставляет сервисы реального времени, такие как сборка мусора.

APPX-манифестом приложения регистрируются все зависимости. Помимо EXE-файла приложения, библиотеки DLL и среды выполнения mrt100_app.dll, которые входят непосредственно в APPX-пакет, пакет включает два дополнительных файла:

  • msvcr140_app.dll — библиотека языка C времени выполнения (CRT), используемая mrt100_app.dll. Она включается по ссылке платформы в пакете.
  • mrt100.dll. Эта библиотека содержит функции, которые могут повысить производительность библиотеки mrt100_app.dll, хотя ее отсутствие не препятствует функционированию mrt100_app.dll. Она загружается из папки system32 на локальном компьютере, если там она имеется.

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

  • Отражение.
  • динамический вызов или вызов посредством позднего связывания;
  • сериализация и десериализация;
  • COM-взаимодействие.

Если во время выполнения метаданные или необходимый код отсутствуют, среда выполнения .NET Native вызывает исключение. Чтобы предотвратить эти исключения, убедитесь, что цепочка инструментов .NET Native включает необходимые метаданные и код реализации, с помощью файла директив времени выполнения. Это XML-файл, указывающий элементы программы, чьи метаданные или код реализации должны быть доступны во время выполнения, и назначающий им политику времени выполнения. Ниже приведен файл директив среды выполнения по умолчанию, который добавляется в проект UWP, скомпилированный цепочкой инструментов .NET Native:

Читайте также:
Программа zotero как пользоваться

Благодаря этому становятся доступными для отражения и динамического вызова все типы и их члены во всех сборках в пакете приложения. Однако это не позволяет выполнять отражение или динамическую активацию типов в сборках библиотеки классов .NET Framework. В большинстве случаев этого достаточно.

См. также раздел

  • Метаданные и компоненты с самоописанием
  • Отражение и машинный код .NET
  • .NET Native общих неполадок

Источник: learn.microsoft.com

Преобразование исходного кода

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

Текст программы, написанный на языке программирования высокого уровня, до того как быть преобразованным в машинные коды, называется исходным кодом (source code). Компилятор (compiler) преобразует исходный код в машинные коды, называемые объектным кодом (object code), то есть программой на выходном языке транслятора.

Перед выполнением протекает процесс редактирования связей (linkage editing), когда модули выходной программы объединяются с другими модулями объектного кода, содержащими, например, данные. Результирующий загрузочный модуль – это команды, непосредственно выполняемые компьютером. На Рис. 2.3 показан процесс трансляции кода программы.

Языки программирования, для которых существуют программы-компиляторы, называют компилируемыми языками. К ним относятся Паскаль, С++, Delphi, Fortran и другие.

Интегрированная система Турбо Паскаль состоит из языка программирования и среды программирования. В эту систему входят необходимые части Turbo Pascal:

Интегрированная среда Турбо Паскаль запускается программой TURBO.EXE (Bp.exe)

Контрольные вопросы

1. Понятие языка программирования

2. Классификация языков программирования

3. Понятие виртуальной машины и системы программирования

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

5. Идентификаторы, их назначение в программе?

6. Операции, типы операций

7. Данные и константы, примеры

8. Переменные, их назначение, приведите примеры

9. Выражения, типы выражений, приведите примеры

10. Понятия оператора,

11. Понятие функции

12. Понятие программы, подпрограммы, программирования

13. Схема преобразования исходного кода, поясните схему

14. Что включает в себя интегрированная среда Турбо Паскаль, поясните каждый пункт и его назначение.

Самостоятельная работа

1. Создайте презентацию на тему:

Эволюция языков программирования.

Раздел 2 . Основы программирования на Турбо Паскаль.

Тема 2.1.1. Элементы языка Pascal. Структура языка.

Структурная схема программы на алгоритмическом языке. Алфавит языка.

После изучения темы студент должен

знать:

— Структурную схему программы;

— Способы описания меток, переменных, типов, констант;

— Объекты алфавита языка;

Уметь

— описывать переменные, метки, константы;

— записывать арифметические и текстовые выражения и выводить результаты.

I. Структурная схема программы на языке TurboPascal

Любая программа на языке TurboPascal(ТР) состоит из двух основных разделов: раздела описаний данных и раздела операторов, и заканчивается всегда символом «.».

Begin

End.

Раздел описаний может включать в себя подразделы описания меток, констант, типов, переменных, а также подпрограмм, реализуемых в виде процедур или функций. Если в программе используются стандартные или библиотечные модули (Unit), то первой должна стоять директива Uses, в которой перечисляются используемые модули. Рекомендуется всегда включать в программу директиву: Uses CRT;

Она подсоединяет стандартный модуль CRT, содержащий описание процедур, функций, констант, типов и переменных, позволяющих работать с цветом, звуком, экраном и ускорить операции ввода-вывода данных.

Читайте также:
Как установить программу Mozilla

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

Раздел описаний может содержать следующие подразделы:

1. Список имен, используемых модулей.

2.Объявление меток.

3.Объявление констант.

4.Объявление типов.

5.Объявление переменных.

6.Описание процедур и функций.

Не все подразделы обязательны.

Каждый из подразделов раздела описаний начинается своим ключевым словом.

Список имен модулей начинается с ключевого слова USES.

Раздел меток начинается с ключевого слова LABEL, раздел констант — CONST , раздел типов — TYPE , раздел переменных — VAR .

Раздел операторов следует за разделом описаний и всегда заключается в операторные скобки, определяемые ключевыми словами

Begin . End.

Операторы отделяются друг от друга символом «;». Запись операторов в строке может начинаться с любой позиции. В одной строке можно записать несколько операторов. Один оператор может быть записан в нескольких строках.

Описание меток

Метка представляет собой правильный идентификатор или любое

целое без знака от 1 до 9999. Метки должны быть описаны в подразделе Label. Каждая метка описывается только один раз в каждой программной единице (основной программе или подпрограммах).

Label метка; или Label метка1, метка2, …, меткаN;

В программе метка ставится перед оператором, на который передается управление и отделяется от него символом «:».

Метка : выполняемый оператор;

Примеры описания меток:

Label m1, m2, met1, l1, lab, 125;

Описание переменных

Любая переменная, используемая в программе (и подпрограммах) должна быть определена (описана) в подразделе Var раздела описаний, причем каждая переменная описывается только один раз в каждой программной единице.

Определение переменной должно содержать имя переменной и ее тип, разделенные двоеточием.

VAR имя переменной : тип;

Var x:real; i: byte;

S: char; b: boolean;

Переменные одного типа записываются друг за другом через запятые:

Var a, b, c : real;

Для переменных, описанных в каждой программной единице, отводится определенный объем памяти.

Переменные, описанные в основной (главной) программе, называют глобальными переменными. Общий объем памяти, отведенный под глобальные переменные, не должен превышать 64 Кбайта.

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

Описание типов

В простейших случаях тип переменных указывается явно, при их описании в разделе Var:

Var Имя переменной: тип;

Можно сопоставить типу некоторое имя и описать его в разделе Type:

Type Имя типа = Тип;

Type Diapason = 1..1000;

Это дает возможность программисту определять и использовать свои собственные типы, а не стандартные.

Далее можно имена типов, введенные в подразделе Type использовать в подразделе Var:

Источник: megaobuchalka.ru

Как называется процесс преобразования компьютерной программы в машинные коды?

Как обычно называют людей, которые взламывают компьютерные программы?

Как обычно называют людей, которые взламывают компьютерные программы?

#Сложность: 25 000 руб. #Компьютеры #Кто хочет стать миллионером? #Сложность: 50 #Пандарина

Как называют взломщика компьютерных программ?

Как называют взломщика компьютерных программ?

#Компьютеры #Сложность: 5 #Пандарина

Как называется компьютерная программа, позволяющая упаковывать файлы?

Как называется компьютерная программа, позволяющая упаковывать файлы?

#Сложность: 50 #Пандарина

Как называется компьютерная программа, с помощью которой вывели математическую формулу определения убийцы в романах Агаты Кристи?

Как называется компьютерная программа, с помощью которой вывели математическую формулу определения убийцы в романах Агаты Кристи?

#Сложность: 10000 #Пандарина

В чём состязаются на Темзе Оксфордский и Кембриджский университеты?

В чём состязаются на Темзе Оксфордский и Кембриджский университеты?

#Сложность: 10 000 руб. #Кто хочет стать миллионером? #Универ: Прокачай общагу! #Великобритания #Сложность: 100 #Пандарина

Где расположен Замок Святого Ангела?

Где расположен Замок Святого Ангела?

#Универ: Прокачай общагу!

Что в конце XVII века служило банкнотами на территории современной Канады?

Что в конце XVII века служило банкнотами на территории современной Канады?

#Сложность: 5000 #Пандарина

Какое международное название носит отряд бабочек?

Какое международное название носит отряд бабочек?

#Сложность: 200 #Пандарина

Источник: umnik.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru