Where is "ildasm" in Visual Studio 2019?
I used to be able to run ildasm in the Developer Command Prompt for Visual Studio 2017. With Visual Studio 2019, ildasm is no longer available:
Was it replaced with something else or is my VS 2019 installation incomplete?
2 Answers 2
ildasm.exe is installed with the Windows SDK tools, located in C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ildasm.exe or somewhere similar depending on the version.
You can install the SDK from this website or by selecting it in the optional components during the installation of VS2019.
Введение в MSIL
Для создания приложений на платформе .NET можно использовать различные языки программирования — C#, VB.NET, F#, другие языки, которые имеют неофициальную поддержку .NET (типа Deflfi .NET и т.д.). При компиляции кода на любом из этих языков создается сборка — это может быть выполняемое приложение, либо библиотека классов, которая используется в других приложениях. Однако вне зависимости от того, какой язык используется, скомпилированная сборка содержит код в некоторой промежуточной форме, независимой от исходного языка программирования, целевой машины и ее операционной системы. Благодаря этому проекты на одном .NET-языке могут использовать сборки, написанные на другом .NET-совместимом языке программирования. При запуске приложения и соотвественно запуске файла сборки общеязыковая среда выполнения CLR загружает ее и преобразует ее код в машинный код для последующего выполнения.
Промежуточное представление приложений .NET, предназначенное для общеязыковой среды выполнения CLR. среды, включает в себя два основных компонента: метаданные и управляемый код (managed code). Метаданные — это система дескрипторов всех компонентов приложения (классов, структур и их элементов и т.д.) и их отношения. Управляемый код представляет функциональность методов приложения, закодированных в специальной бинарной форме, которая называется MSIL или Microsoft intermediate language (другие названия — Common Intermediate Language (CIL) или просто Intermediate Language (IL). Затем уже при выполнении сборки JIT-компилятор компилирует методы, закодированные в MSIL, в бинарный/машинный код текущей платформы, который затем собственно и выполняется.
Для работы с кодом IL Microsoft предоставляет ряд утилит, в частности, ildasm и ilasm.
ildasm. Декомпиляция кода IL
Утилита ildasm предназначена для декомпиляции сборки .NET и получения из нее кода IL. Для использования данной утилиты надо установить nuget-пакет Microsoft.NETCore.ILDAsm .
Стоит отметить, что пакет устанавливается глобально в кэш nuget, поэтому для других проектов не надо повторно его устанавливать. Например, на Windows для версии .NET 6.0.0 это каталог
Например, в моем случае это каталог C:\Users\eugen\.nuget\packages\microsoft.netcore.ildasm\6.0.0\runtimes\native . И в этом каталоге можно найти саму утилиту ildasm.
Стоит отметить, что в качестве альтернативы мы также можем установить пакет nuget Ildasm для конкретной платформы. Нужный пакет называется по шаблону runtime.[платформа].Microsoft.NETCore.ILDAsm . Например, некоторые пакеты:
Рассмотрим, как использовать эту утилиту. Для начала скомпилируем какую-нибудь программу на C#. Пусть это будет следующая простейшая программа на C# 10:
После построения проекта в папке проекта в каталоге bin\Debug\net6.0\ мы найдем скомпилированный файл сборки, который называется по имени проекта и имеет расширение dll.
Например, в моем случае проект называется MSILApp, соотвественно файл сборки называется MSILApp.dll, а полный путь к файлу сборки будет C:\Users\eugen\source\repos\csharp\Console\MSILApp\MSILApp\bin\Debug\net6.0
Теперь декомпилируем полученную сборку. Для этого передадим утилите ildasm путь к файлу сборки в виде
В этом случае код IL сборки будет выводиться на консоль. Но мы также можем вывести его в файл. Для этого утилите ildasm нужно передать параметр /out, который указывает на путь к генерируемому файлу.
Итак, откроем командную строку/терминал и сначала с помощью команды cd перейдем к каталогу, где располагается файл сборки. И затем передадим утилите ildasm файл сборки и укажем имя выходного файла:
И после выполнения команды в папке, где располагается файл сборки, также появится файл со сгенерированным кодом IL:
В моем случае код IL будет выглядеть следующим образом:
То есть это тот код, в который компилируется простейшая программа на C#, выводящая на строку «Hello World»
Стоит отметить, что на Windows при установке Visual Studio и .NET 4.X также устанвливается графическая утилита ildasm , которая в отличие от консольной утилиты позволяет графически посмотреть код IL сборки. В системе она расположена по пути
Правда, она нацелена прежде всего на сборки, скомпилированные с помощью .NET Framework 4.x, но также позволяет просматривать (по крайней мере некоторые) сборки .NET Core/.NET5+
Где в Visual Studio находится окно дизасемблерного кода?
Подскажите пожалуйста где в Visual Studio находится окно дизасемблерного кода?
Также интересно как запустить дизасемблер, который находится по умолчанию в Visual Studio 2012?
Мне нужен путь и конкретный файл который надо запустить.
Добавлено через 41 секунду
Это относится к C#
Где в Visual Studio находится компилятор?
И как он называется? Компилятор же? Не ассемблер, правильно говорить?
Где в Visual Studio 2015 находится Windows Store?
Начал изучать C# по книге Эндрю Стиллмен Изучаем C# 3-е издание 2014 г. Там написано. Запустите.
Окно карты кода в Visual Studio
Прикрепил скрин снизу. Как называется окно которое обведено краным? Где его включить? Увидел в.
Где находится html-код в ASP.NET Visual Studio
Здравствуйте, у меня такое задание оптимизировать сайт. я хотела добавить мета тегов в html.
Ищу файл: Ildasm.exe (IL Disassembler)
Где он в пути находится?
Добавлено через 4 минуты
Сообщение от Usaga
А если у меня windows 8.1 как найти ILDasm ?
Я в одном видео (https://www.youtube.com/watch?v=7lxrOusrFvs) увидел, что он его использует и сказал что находится в пакете VS, где то в папках.
Добавлено через 1 минуту
Сообщение от Usaga
Как это делается?
Добавлено через 3 минуты
Он в видео показал: Открывается окно и дерево методов и классов. И выбираешь клас или метод и прямо ковыряешь ассемблерный код прямо в том пути, который выбираешь.
Добавлено через 3 минуты
Или дайте ссылку где его качать.
Сообщение было отмечено infobos как решение
Решение
Вот путь: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe
Скрылось окно ввода кода в Visual Studio
Помогите комп неожиданно вырубился когда редактировал код, после этого в visual studio скрылось.
Где находится файл csc.exe у Microsoft Visual Studio 2008?
Задаю не новый вопрос, но всё же. Где находится файл csc.exe у Microsoft Visual Studio 2008.
Исчезло окно записи кода в Visual Studio 2012
Изучаю vb.net на китайском, но не в этом суть. Visual Studio 2012 прекрасно работал, пока вдруг не.
Где в Visual Studio можно настроить шрифт кода?
Где в Visual Studio можно настроить шрифт кода? Изменить размер и убрать это сглаживание от.
Практическое руководство. Просмотр содержимого сборки
Можно использовать Ildasm.exe (дизассемблер IL) для просмотра сведений промежуточного языка MSIL в файле. Если анализируемый файл является сборкой, то эти данные могут включать в себя атрибуты сборки, а также ссылки на другие модули и сборки. Эти данные полезны для определения того, является ли файл сборкой или частью сборки и содержит ли он ссылки на другие модули и сборки.
Чтобы отобразить содержимое сборки с помощью Ildasm.exe , введите ildasm <assembly name> в командной строке. Например, следующая команда дизассемблирует сборку Hello.exe.
Для просмотра сведений о манифесте сборки дважды щелкните значок Манифест в окне дизассемблера MSIL.
Пример
Следующий пример начинается с простой программы "Hello World". После компиляции программы используйте Ildasm.exe , чтобы декомпилировать сборку Hello.exe и просмотреть манифест сборки.
Выполните команду ildasm.exe над сборкой Hello.exe и дважды щелкните значок Манифест в окне дизассемблера MSIL, чтобы получить следующие выходные данные:
В следующей таблице описаны все директивы в манифесте сборки Hello.exe , используемой в этом примере.
Директива | Описание |
---|---|
.assembly extern <assembly name> | Определяет другую сборку, содержащую элементы, на которые имеются ссылки в текущем модуле (в этом примере — mscorlib ). |
.publickeytoken <token> | Определяет маркер действующего ключа сборки, на которую имеется ссылка. |
.ver <version number> | Задает номер версии, на которую имеется ссылка. |
.assembly <assembly name> | Задает имя сборки. |
.hash algorithm <int32 value> | Задает используемый хэш-алгоритм. |
.ver <version number> | Задает номер версии сборки. |
.module <file name> | Задает имена модулей, составляющих сборку. В этом примере сборка состоит только из одного файла. |
.subsystem <value> | Указывает требуемую для программы среду приложения. В этом примере значение "3" указывает на то, что выполняемый модуль запускается на консоли. |
.corflags | В настоящее время представляет собой зарезервированное поле метаданных. |
Манифест сборки может содержать несколько различных директив, зависящих от содержимого сборки. Расширенный список директив манифеста сборки содержится в документации ECMA, в том числе в частях "Раздел II. Определение метаданных и семантика" и "Раздел III. Набор инструкций CIL".