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

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

  • Этот MSIL/CIL содержится в этом файле exe/dll?
  • Я хочу видеть этот код промежуточного языка. Просто чтобы почувствовать его существование. Как просмотреть его?
  • Они вызывают этот exe/dll файл assembly. Используют ли они это "причудливое слово", чтобы отличать их от файлов exe/dll, содержащих двоичный код (собственный код)?

Ответ 1

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

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

Ответ 2

Один из моих любимых способов увидеть IL для фрагмента С# - использовать бесплатный инструмент

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

Ответ 3

Если вы хотите его в Интернете, .NET Fiddle отлично. Просто вставьте код и нажмите View IL в правом верхнем углу.

Ответ 4

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

Ответ 6

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

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

Ответ 7

Я только что потратил пару часов на поиск лучшего инструмента, который мог бы позволить мне просматривать код IL непосредственно внутри Visual Studio.

Единственное решение, которое я нашел до сих пор, это Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637

он работает очень хорошо!

В противном случае второе лучшее решение, но без интеграции с визуальной студией, - это JetBrains dotPeek, что является довольно удивительным, если честно.

Ответ 8

Я знаю, что это старый вопрос, и я бы предпочел любой из вышеперечисленных инструментов. Тем не менее, в крайнем случае, в окне с Visual Studio был показан просмотрщик MSIL с по крайней мере версией 2005.

Инструмент имеет имя ildasm.exe и находится в следующих папках после установки Visual Studio:

Visual Studio 2005 "C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"

Visual Studio 2008 "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe"

Visual Studio 2010 "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe"

Дополнительные сведения см. в разделе " Как просмотреть содержимое сборки" в библиотеке MSDN.

Ответ 9

Другая опция: используйте ReSharper

введите описание изображения здесь Исходный /IL синхронизированный вид: левая синяя линия фона соответствует правильному блоку IL

В Visual Studio:

  • Выберите ReSharper | Windows | IL Viewer
  • или контекстное меню: перемещение | IL Код

Поддерживает синхронизированный просмотр исходного кода и IL - при нажатии на оператор в источнике, соответствующий блок в IL подсвечивается (и наоборот). Отображает описания для IL из Microsoft Developer Network и набора команд "Common Intermediate Language (CIL)" из стандартной спецификации ECMA.

см. Просмотр промежуточного языка (IL) в справке Resharper. Изображение выше описано в справке Resharper.

Свободный вариант - использовать Jetbrains dotPeek

см. также: "Изучение промежуточного языка (IL) с помощью ReSharper и dotPeek", Maarten Balliauw, 19 января 2017 г. - Блог Jetbrains

Ответ 10

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

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

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

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

Ответ 11

Я хочу просмотреть промежуточный язык, попробуйте скачать JustDecompile от Telerik (который в настоящее время бесплатный, требуется регистрация, хотя).

Перетащите свою DLL и выберите IL в раскрывающемся списке вверху!