Практическое руководство. Просмотр содержимого сборок
Обновлен: Ноябрь 2007
Можно использовать Дизассемблер MSIL (Ildasm.exe) для просмотра сведений промежуточного языка MSIL в файле. Если анализируемый файл является сборкой, то эти данные могут включать в себя атрибуты сборки, а также ссылки на другие модули и сборки. Эти данные полезны для определения того, является ли файл сборкой или частью сборки и имеет ли он ссылки на другие модули и сборки.
Отображение содержимого сборки с помощью Ildasm.exe
Введите ildasm <имя сборки> в командной строке. Например, следующая команда дизассемблирует сборку Hello.exe.
ildasm Hello.exe
Просмотр сведений манифеста сборки
- Дважды щелкните значок MANIFEST в окне дизассемблера MSIL.
Пример
Следующий пример начинается с простой программы "Hello, World". После компиляции программы используйте программу Ildasm.exe, чтобы декомпилировать сборку Hello.exe и просмотреть манифест сборки.
Imports System
Public Module modmain
Sub Main()
Console.WriteLine ("Hello World using Visual Basic!")
End Sub
End Module
using System;
class MainApp {
public static void Main() {
Console.WriteLine("Hello World using C#!");
}
}
#using <mscorlib.dll>
using namespace System;
void main() {
Console::WriteLine(L"Hello World using Managed Extensions!");
}
Выполните команду ildasm.exe над сборкой Hello.exe и дважды щелкните значок MANIFEST в окне IL DASM, чтобы получить следующие выходные данные:
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 1:0:2411:0
}
.assembly Hello
{
// --- The following custom attribute is added automatically; do not uncomment. -------
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
// bool) = ( 01 00 00 01 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module Hello.exe
// MVID: {58AD9DFD-63A6-462A-8AD5-42CBC95AA147}
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x03330000
В следующей таблице описаны все директивы в манифесте сборки Hello.exe, используемой в этом примере.
Директива |
Описание |
---|---|
.assembly extern <имя сборки> |
Определяет другую сборку, содержащую элементы, на которые имеются ссылки в текущем модуле (в этом примере — mscorlib). |
.publickeytoken <маркер> |
Определяет маркер действующего ключа сборки, на которую имеется ссылка. |
.ver <номер версии> |
Задает номер версии сборки, на которую имеется ссылка. |
.assembly <имя сборки> |
Задает имя сборки. |
.hash algorithm <значение int32> |
Задает используемый хэш-алгоритм. |
.ver <номер версии> |
Задает номер версии сборки. |
.module <имя файла> |
Задает имена модулей, составляющих сборку. В данном примере сборка состоит только из одного файла. |
.subsystem <значение> |
Указывает требуемую для программы среду приложения. В данном примере значение "3" указывает на то, что выполняемый модуль запускается на консоли. |
.corflags |
На настоящее время представляет собой зарезервированное поле метаданных. |
Манифест сборки может содержать несколько различных директив, зависящих от ее содержимого. Расширенный список директив манифеста сборки содержится в документации ECMA, особенно в "Разделе II: Определение метаданных и семантика" и в "Разделе III: Набор инструкций CIL". Документация доступна в Интернете на страницах https://msdn.microsoft.com/net/ecma/ и http://www.ecma-international.org/publications/standards/Ecma-335.htm.
См. также
Основные понятия
Руководства по работе с доменами приложений и сборками