Как может я представление MSIL / CIL, сгенерированный компилятором C#? Почему это называют блоком?

Я плохо знаком с.NET программирование C#. Я следую немногим книгам. Сказано это вместо того, чтобы компилировать его непосредственно в двоичный код (Собственный код). Код высокого уровня преобразовывается на промежуточный язык (названный MSIL иначе CIL). Но когда я компилирую, я получаю exe/Dll файл.

  1. Этот MSIL/CIL containted в них exe/dll файл?
  2. Я хочу видеть тот код промежуточного языка. Только получить ощущение его существования. Как просмотреть его?
  3. Они называют этот exe/dll файл assembly. Они используют это "необычное слово" только для дифференциации их из exe/dll файлов, которые содержат двоичный код (собственный код)?
121
задан starblue 25 July 2010 в 05:58
поделиться

6 ответов

  1. Да, точнее, в разделе .text PE-файла (переносимый исполняемый файл = * .exe или * .dll). Более подробную информацию можно найти здесь .
  2. Лучше всего использовать ILSpy (Reflector больше не является бесплатным). Это бесплатный дизассемблер, который может разобрать вашу сборку в MSIL, а также в C #, VB (в некоторой степени). Пакет SDK для .NET Framework содержит ILDasm, который является официальным дизассемблером MSIL.
  3. В основном да. Сборка - это файл, содержащий код MSIL и соответствующие метаданные. Это не ограничивается PE-файлами как таковыми, но все текущие реализации CLR используют их.

Если я могу также порекомендовать хорошую книгу по этому вопросу, то это Expert .NET 2.0 IL Assembler от Сержа Лидина. Он парень, который разработал MSIL.

91
ответ дан 24 November 2019 в 01:31
поделиться

Один из моих любимых способов увидеть IL для фрагмента C # - использовать бесплатный инструмент LINQPad . После ввода некоторого кода и выбора «Операторы C #» вверху (или «Программа C #», в зависимости от того, что подходит), нажмите кнопку «IL» под областью ввода кода, и вы увидите сгенерированный IL.

Использование LINQPad для этого намного удобнее, чем загрузка Visual Studio или запуск компилятора из командной строки, затем загрузка ILDASM и открытие файла .il в текстовом редакторе.

46
ответ дан 24 November 2019 в 01:31
поделиться
  1. Да, это сборка.
  2. Вам потребуется .NET Reflector или ILDasm .
  3. Подробнее о проверке сборки ЗДЕСЬ .

P.S Поскольку вы читаете некоторые книги, я настоятельно рекомендую вам CLR через C # .

12
ответ дан 24 November 2019 в 01:31
поделиться

По моему опыту, лучший источник знаний, связанных с IL, - это Andrew Troelsen «Pro C # and .NET Platform». Начиная с 3-го издания, у него действительно, действительно выдающаяся глава (около 50 страниц) о том, как понимать IL и даже писать свой собственный код и использовать ILAsm. Я использовал эту информацию, чтобы выяснить, существует ли множественное наследование в мире .NET. Также вы можете попробовать использовать некоторые очень интересные функции в IL (например, фильтрацию исключений, которая существует только в VB, но не в C #).

Я настоятельно рекомендую прочитать эту главу.

В конце концов, .NET Reflector стал корпоративным стандартом для исследования IL-кода сборок, и книга Рихтера определенно "должна прочитать". Но из других книг, подобных упомянутым выше, вы могли бы раскрыть действительно полезные вещи :)

Да, каждая сборка в мире .NET содержит некоторый код IL (вместе с манифестом), который можно просмотреть через Reflector или ILDasm. Более того, Reflector может показать вам код, оптимизированный для C # и VB. Это означает, что любой человек может просмотреть исходный код сборки, поэтому в коммерческих продуктах используются обфускаторы.

2
ответ дан 24 November 2019 в 01:31
поделиться

Во многих отношениях сборки .NET похожи на пакеты байткода Java.

  1. Да. Они также содержат манифесты и другие данные, но CIL является частью exe/dll.
  2. Используйте ILDasm или Reflector - большинство людей предпочитают Reflector, поскольку он гораздо мощнее. Оба покажут вам, какой CIL был создан. В Википедии есть список всех инструкций CIL, для лучшего восприятия (он похож на ассемблер).
  3. Я полагаю, что это подразумевается как сборка кода. Хороший способ отличить его от native.
7
ответ дан 24 November 2019 в 01:31
поделиться

Я считаю, что они называются "сборками", потому что сборка - это набор модулей, собранных вместе манифестом.

multi-file assembly
(источник: microsoft.com)

Подробности см. в Содержание сборки.

11
ответ дан 24 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: